Language agnostic 是哈弗森公式还是文森蒂公式';用什么公式计算距离更好?

Language agnostic 是哈弗森公式还是文森蒂公式';用什么公式计算距离更好?,language-agnostic,geospatial,latitude-longitude,trigonometry,Language Agnostic,Geospatial,Latitude Longitude,Trigonometry,计算两个纬度/经度点之间的距离,哈弗森公式和文森蒂公式哪个更好?为什么? 距离显然是在地球上计算出来的。WGS84与GCJ02坐标是否影响计算或距离(Vincenty公式考虑了WGS84轴) 例如,在Android中,中使用了Haversine公式,但Vincenty公式由Android.Location对象(Location.DistanceBeween())使用。是一个更简单的计算,但它没有提供Vincenty提供的高精度 更精确,但计算量更大,因此执行速度较慢,并增加电池使用量 正如任何“

计算两个纬度/经度点之间的距离,哈弗森公式和文森蒂公式哪个更好?为什么?

距离显然是在地球上计算出来的。WGS84与GCJ02坐标是否影响计算或距离(Vincenty公式考虑了WGS84轴)

例如,在Android中,中使用了Haversine公式,但Vincenty公式由
Android.Location
对象(
Location.DistanceBeween()
)使用。

是一个更简单的计算,但它没有提供Vincenty提供的高精度

更精确,但计算量更大,因此执行速度较慢,并增加电池使用量


正如任何“更好”的东西一样,这取决于您的具体应用。对于您的应用程序,Vincenty可能是比Haversine“更好”的选择,但对于不同的应用程序,Haversine可能是更好的选择。您必须查看用例的细节,并根据您在其中找到的内容做出决定。

哈弗森和文森蒂是解决不同问题的两种算法 问题。Haversine计算球体上的大圆距离 而Vincenty则计算物体表面上的最短(测地线)距离 旋转椭球体。所以你的问题的答案可能会被打破 分为两部分:

  • 是否要计算椭球体上球体上的距离
  • Haversine或Vincenty计算给定问题的准确度如何
  • 对于地面应用,旋转椭球体是合理的选择 接近“平均海平面”;误差为±100米。这个 这个椭球体的扁平度很小,约为1/300,因此可以 近似于一个球体(例如,体积相等)

    大圆距离与测地线距离的差异高达0.5%。在里面 一些应用程序,例如,从Cape到Cairo的距离是多少?, 这个错误可以忽略。在其他应用中,例如,确定 海洋边界太大了(距离1米有5米) 公里)。通常,使用测地距离更安全

    如果你感兴趣的是旅行距离(汽车、轮船或飞机), 在所走的道路上有很多制约因素,而伟大的 圆或测地线距离,用于测量最短路径的长度 在理想的表面上,这是合适的

    关于算法是否准确的问题:

    哈弗森精确到四舍五入,除非分数接近四舍五入 对足的。表中给出了更好的公式

    Vincenty通常精确到0.1毫米左右。然而,如果要点是 该算法几乎是反模式的,无法收敛,误差很小 大得多。我给出了一个更好的算法来解决测地线问题 在里面另见

    解决测地线问题比解决测地线问题慢 大圈。但是它仍然非常快(每次计算大约1μs),所以 这不应该成为选择大圆距离的理由

    ADENDUM

    是实现我的算法的Java包 用于查找测地距离。与文森蒂的方法不同,这是准确的
    我的理解是,在大多数应用中,哈弗森公式(假设地球为球形)为相距数百英里的点提供了足够的精度,而文森蒂公式(基于椭球体地球)为任何一对点提供了足够的精度,尤其是对于近对足点。@njuffa-Haversine公式甚至可以返回不准确的结果,即使是对于近对足点。相对误差可达0.5%。例如,对于点(48.857461,2.291029)和(48.857461,2.304698),返回1000.0米和1003.036米。@njuffa Vincenty的近反极点公式无法收敛。说Vincenty的公式有时无法收敛于近反极点,不是更准确吗,否则,这类点对只需要非常大量的迭代?为了证明哈弗森公式的计算不准确性,我在维基百科页面(基于Vincenty算法的简化!)用单精度编码了哈弗森公式和改进的大圆计算。在100米测试用例中,最坏情况下的误差为
    4.44148 km@(-64.492126,-157.413849)(64.452232,22.589592)
    [Hav]和
    0.00392 km@(-5.779476166.661758)(0.646194,-44.298119)
    [Impr]文森特的近对足点方法的问题不是收敛缓慢;相反,在这种情况下,迭代解方法是不稳定的(如果你开始时的结果接近于解,那么每次迭代都会使你远离解)。请注意,“改进”方法的最大误差为0.00393 km,接近单精度算法的舍入极限;实际上,需要双精度。我完全知道,改进后的方法使大圆距离精确到单精度,但注释的长度限制没有空间明确指出这一点。我最想强调的是,维基百科改进后的公式比经典的哈弗森公式要好得多(多亏了它的指针),但计算成本几乎不比经典的哈弗森公式高:人们似乎应该总是使用改进后的公式,而不是哈弗森公式。在任何类型的距离计算中是否需要双精度似乎取决于每个用例的精度要求。@cffk:您的答案看起来很好,值得一提,可能包括实现您推荐的距离算法的代码。值得注意的是,下面还有C#的libs/wrappers,javascript和Python。