0

The purpose is to calculate the distance travelled. For this I calculate an euclidean distance with velocity, acceleration and time. I get this data from GPS. Here's my calculation:

    private float getDistanceTraveled(float vend, float vstart, long timeDifference){
        float distance = 0;

        if(vend == 0 && vstart == 0)
            return distance;

        if(vend - vstart == 0)
            distance = vend * timeDifference;
        else
            distance = (vend * vend - vstart * vstart) 
                    / ((2 * (vend - vstart) / timeDifference);

        return distance;
    }

What is the usual way to convert this distance to a shortest distance over earth surface?

I did it with simple circle calculations, where my given distance is the chord c and the radius r is the earth radius.

double distance = 2 * r * Math.asin(c / (2 * r));

I'm not 100% sure, if this is the correct way to calculate the euclidean distance and convert it. Have I take something else into account?

I'm familiar with the Haversine Formula, but I can't use the coordinates in this approach.

4

2 回答 2

1

您正在测量的是人/车辆行驶的米数。
没关系。
你有正确的米,没有必要将其转换为更大的圆周距离,也没有这个意义。
这仅对从一个坐标到下一个测量值超过 10-100 公里的距离有意义:(
可能存在您需要的特殊情况,例如当飞机直线飞行时(通过 3d 直线的豆子飞行 100 公里,然后跌落地球,然后你想知道更大的圆距离是多少。)

所以你有正确的仪表,如果你需要更多(例如特定方向的位置预测坐标),那么这将是另一个问题。

于 2013-10-15T14:28:48.653 回答
0

使用此公式证明您不需要更大的圆转换距离。

b = 2 * r * arcsin(s / 2r)

其中 r 是以米为单位的地球半径,s 是以米为单位的直线视线距离

b 是弦长,即以地球为半径的圆上的长度。将 b 与 s 进行比较,您会发现为您的应用程序区分这些值可能没有意义。

另见http://de.wikipedia.org/wiki/Kreissegment
只有德语链接在“Bogenlänge”提供了公式

于 2013-10-15T15:51:00.333 回答