如何将距离转换为大圆距离?

时间:2013-10-15 10:22:48

标签: java math gps

目的是计算行进距离。为此,我用速度,加速度和时间计算euclidean distance。我从GPS获得这些数据。这是我的计算:

    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;
    }

将此距离转换为地球表面最短距离的常用方法是什么?

我是通过简单的圆计算完成的,其中我的给定距离是chord c,而radius r是地球半径。

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

我不是百分百肯定,如果这是计算欧氏距离并转换它的正确方法。我是否考虑过其他因素?

我熟悉Haversine Formula,但我无法使用此方法中的坐标。

2 个答案:

答案 0 :(得分:1)

您测量的是人/车行驶的米数 多数民众赞成 你有正确的仪表,没有必要将它转换为更大的圆距离,也没有意义 这仅适用于从一个坐标到另一个坐标超过10-100 km的距离:
(可能有一些特殊的情况,你想要这个,例如当飞机直线飞行时(通过三维直线豆100km,然后落在地球上,然后你想知道更大的圆距离是什么。)

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

答案 1 :(得分:0)

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

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

其中r是以米为单位的地球半径 和s是你的直线距离(米)

然后

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

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