Haversine 公式还是 Vincenty 公式更适合计算距离?
Is the Haversine Formula or the Vincenty's Formula better for calculating distance?
对于计算两个 latitude/longitude 点之间的距离,Haversine 公式或 Vincenty 公式哪个更好?为什么?
这个距离显然是在地球上计算的。 WGS84 与 GCJ02 坐标是否会影响计算或距离(Vincenty 的公式将 WGS84 轴考虑在内)?
例如,在Android中,Google Map Utils中使用了Haversine公式,但是android.Location
对象(Location.distanceBetween()
)中使用了Vincenty公式。
Haversine 是一个更简单的计算,但它不提供 Vincenty 提供的高精度。
Vincenty 更准确,但计算量更大,因此执行速度更慢并增加电池使用量。
与任何事情一样 "better" 是您的特定应用程序的问题。对于您的应用程序,与 Haversine 相比,Vincenty 可能是 "better" 个选择,但对于不同的应用程序,Haversine 可能是更好的选择。您将必须查看用例的详细信息,并根据在那里找到的内容做出决定。
Haversine和Vincenty是解决不同问题的两种算法
问题。 Haversine 计算球体上的大圆距离
而 Vincenty 计算一个物体表面的最短(测地线)距离
旋转椭圆体。所以你的问题的答案可以被打破
分成两部分:
- 你想计算椭圆体上球体的距离吗?
- Haversine 或 Vincenty 在计算给定问题时的准确性如何?
对于地面应用,旋转椭圆体是合理的
近似于 "mean sea level";误差为± 100 m。这
这个椭球的扁平度很小,大约是 1/300,所以可以
近似为一个球体(例如,等体积)。
大圆距离与测地线距离最多相差 0.5%。在
一些应用程序,例如,从开普敦到开罗的距离是多少?
这个错误可以忽略。在其他应用中,例如,确定
海上边界,它太大了(在 1 的距离内有 5 m
公里)。一般来说,使用测地线距离更安全。
如果您对旅行的距离(乘汽车、轮船或飞机)感兴趣,
所走的道路有很多限制,也不是伟大的
圆或测地距离,测量最短路径的长度
在理想的表面上,将是合适的。
关于算法是否准确的问题:
Haversine 是精确的四舍五入除非点接近
反足。更好的公式在
Wikipedia article on great-circle distances.
Vincenty 通常精确到 0.1 毫米左右。但是,如果这些点是
几乎是对映的,算法无法收敛,误差为
更大。我给出了一个更好的算法来解决测地线问题
在 Algorithms for geodesics。另见
Wikipedia article on geodesics on an ellipsoid.
求解测地线问题比求解
大圆圈。但它仍然非常快(每次计算大约 1 μs),所以
这不应该成为偏爱大圆距离的理由。
附录
Here 是实现我的算法的 Java 包
用于查找测地线距离。与 Vincenty 的方法不同,这是准确的
到处舍入和收敛。
对于计算两个 latitude/longitude 点之间的距离,Haversine 公式或 Vincenty 公式哪个更好?为什么?
这个距离显然是在地球上计算的。 WGS84 与 GCJ02 坐标是否会影响计算或距离(Vincenty 的公式将 WGS84 轴考虑在内)?
例如,在Android中,Google Map Utils中使用了Haversine公式,但是android.Location
对象(Location.distanceBetween()
)中使用了Vincenty公式。
Haversine 是一个更简单的计算,但它不提供 Vincenty 提供的高精度。
Vincenty 更准确,但计算量更大,因此执行速度更慢并增加电池使用量。
与任何事情一样 "better" 是您的特定应用程序的问题。对于您的应用程序,与 Haversine 相比,Vincenty 可能是 "better" 个选择,但对于不同的应用程序,Haversine 可能是更好的选择。您将必须查看用例的详细信息,并根据在那里找到的内容做出决定。
Haversine和Vincenty是解决不同问题的两种算法 问题。 Haversine 计算球体上的大圆距离 而 Vincenty 计算一个物体表面的最短(测地线)距离 旋转椭圆体。所以你的问题的答案可以被打破 分成两部分:
- 你想计算椭圆体上球体的距离吗?
- Haversine 或 Vincenty 在计算给定问题时的准确性如何?
对于地面应用,旋转椭圆体是合理的 近似于 "mean sea level";误差为± 100 m。这 这个椭球的扁平度很小,大约是 1/300,所以可以 近似为一个球体(例如,等体积)。
大圆距离与测地线距离最多相差 0.5%。在 一些应用程序,例如,从开普敦到开罗的距离是多少? 这个错误可以忽略。在其他应用中,例如,确定 海上边界,它太大了(在 1 的距离内有 5 m 公里)。一般来说,使用测地线距离更安全。
如果您对旅行的距离(乘汽车、轮船或飞机)感兴趣, 所走的道路有很多限制,也不是伟大的 圆或测地距离,测量最短路径的长度 在理想的表面上,将是合适的。
关于算法是否准确的问题:
Haversine 是精确的四舍五入除非点接近 反足。更好的公式在 Wikipedia article on great-circle distances.
Vincenty 通常精确到 0.1 毫米左右。但是,如果这些点是 几乎是对映的,算法无法收敛,误差为 更大。我给出了一个更好的算法来解决测地线问题 在 Algorithms for geodesics。另见 Wikipedia article on geodesics on an ellipsoid.
求解测地线问题比求解 大圆圈。但它仍然非常快(每次计算大约 1 μs),所以 这不应该成为偏爱大圆距离的理由。
附录
Here 是实现我的算法的 Java 包 用于查找测地线距离。与 Vincenty 的方法不同,这是准确的 到处舍入和收敛。