【问题标题】:How to convert a distance to a great circle distance?如何将距离转换为大圆距离?
【发布时间】:2013-10-16 01:32:37
【问题描述】:

目的是计算行进的距离。为此,我用速度、加速度和时间计算了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 cradius r 是地球半径。

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

我不能 100% 确定,如果这是计算欧几里得距离并进行转换的正确方法。我是否考虑了其他事情?

我对@9​​87654327@很熟悉,但我不能在这种方法中使用坐标。

【问题讨论】:

  • 欧式距离如何计算?
  • 在给定弦长和圆半径的情况下,是否要计算圆弧的长度?那么你的公式似乎是正确的。
  • @HariShankar 我更新了我的问题。
  • @AbhishekBansal 很高兴听到这个消息,但我可以将此公式用于我的目的还是必须考虑其他因素?
  • Vincenty 的公式可能是您所追求的。请参阅此问题:*.com/questions/27928,其中包含有关 Haversine 和 Vincenty 的答案。

标签: java math gps


【解决方案1】:

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

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

【讨论】:

  • 这是为什么呢?因为距离很小,误差因素无关紧要?在这一点上我很不确定。因为我已经阅读了很多关于这个主题的内容,但每个人都在讲述另一个故事..
  • 因为车辆/人已经在地球表面行驶,所以隐含更大的圆周距离。再进一步也没关系。此外,它取决于您从哪里获得速度信息。从全球定位系统?那么它已经是对地速度了。这仍然无关紧要。你自己计算速度?从 GPS 定位之间的距离,然后取决于所使用的公式,无论是更大的圆圈还是视线距离。最好描述一下你想要解决的问题。
  • 好吧,我从 GPS 获得速度,然后用我的问题中的公式计算距离。我想要实现的只是计算行进的距离。
  • 对于短距离,如用于车辆的两个 GPS 测量之间,地球曲率没有影响。无论道路是否完全平坦,都会产生更大的影响。
  • 感谢您的意见。
【解决方案2】:

用这个公式证明你不需要距离到更大的圆转换。

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

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

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

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

【讨论】:

  • 我已经用过这个公式了。我会做一些测试。问题是我是否可以使用这个公式将距离转换为大圆距离,或者我是否必须考虑更多。
  • 没有公式是不够的,半径取决于方向。
  • 好的,有没有我可以使用的公式?正如你所说,我对 GPS 数据的计算应该可以完成这项工作。但我想知道如何进行转换。
  • 您需要纬度、经度和航向,然后搜索“航空公式”和“从当前位置按距离和方位计算位置”: