GIS - 在计算两点之间的距离时得到奇怪的结果

GIS - Get weird result when calculating distance between two points

我使用算法(参见:calculating distance between two points)来计算两点之间的距离。但它得到了错误的结果,参见 Java 代码:

/**
 * group1:set latitude to 89
 */
// set longitude1 = 0, longitude2 = 1
System.out.println(distance(89, 89, 0, 1, 0 , 0)); // 1941.0            result1

// set longitude1 = 0, longitude2 = 2
System.out.println(distance(89, 89, 0, 2, 0 , 0)); // 3881.0            result2

// set longitude1 = 0, longitude2 = 179
System.out.println(distance(89, 89, 0, 179, 0 , 0)); // 222381.0        result3

// set longitude1 = 0, longitude2 = 180
System.out.println(distance(89, 89, 0, 180, 0 , 0)); // 222390.0        result4

/**
 * group2:set latitude to 0
 */
// set longitude1 = 0, longitude2 = 1
System.out.println(distance(0, 0, 0, 1, 0 , 0)); // 111195.0            result5

// set longitude1 = 0, longitude2 = 2
System.out.println(distance(0, 0, 0, 2, 0 , 0)); // 222390.0            result6

// set longitude1 = 0, longitude2 = 179
System.out.println(distance(0, 0, 0, 179, 0 , 0)); // 19903892          result7

// set longitude1 = 0, longitude2 = 180
System.out.println(distance(0, 0, 0, 180, 0 , 0)); // 20015087          result8

第 1 组:

a = 结果 2 - 结果 1 = 1940

b = 结果 4 - 结果 3 = 9

第 2 组:

c = 结果 6 - 结果 5 = 111195

d = 结果 8 - 结果 7 = 111195

很奇怪。 c = d,group2是对的,但是a ≠ b,group1是错的

如何解决这个问题? 有没有其他更高精度的算法来计算两个坐标点之间的距离

好吧,结果是近似值 - 如果您想要更高的精度,则需要对椭球体进行计算,而不是对公式使用的球体进行计算。

但我认为这根本不重要。你得到的结果是正确的,精度很高,我认为问题不在于结果的精度,而是你对这些距离的期望。

这些是测地线距离 - 球体上的最短距离,因此关于平面地图上距离的直觉在这里并不总是适用。您可以在例如处可视化测地线。 https://academo.org/demos/geodesics/ 以获得更好的直觉。

首先,result2 和 result1 与 result6 和 result5。您可能已经注意到,result6 恰好是 result5 的两倍,但 result2 略小于 result1。为什么是这样?因为从(89, 0)到(89, 2)的测地线不经过(89, 1),而是稍微偏北一点。

从(89, 0)到(89, 180)的测地线穿过北极-所以它与从(89, 0)到(89, 1)的180倍测地线有很大不同。

另一方面,纬度为 0 时测地线始终遵循赤道。或者在对映端 0, 0 和 0, 180 的情况下 - 所有测地线都具有相同的长度。所以你对距离关系的预期在这种特殊情况下是正确的。