java - GIS - 计算两点之间的距离时得到奇怪的结果
问题描述
我使用算法(参见:计算两点之间的距离)来计算两点之间的距离。但它得到错误的结果,请参阅 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 的情况下 - 所有测地线都具有相同的长度。因此,在这种特殊情况下,您对距离关系的期望是正确的。
推荐阅读
- regex - 解析 Alexa 以获取排名信息
- angular-material - mat-card-content 溢出角材质卡
- javascript - 是否可以在剑道图表上设置最小和最大缩放?由于许多项目,我的图表在缩小时使类别轴标签难以辨认
- java - 尝试在 android studio 中连接 jsoup 时,模拟器应用程序崩溃
- java - 约束布局中的 dp 和 wrap_content
- java - 当用户不输入时,如何在 JOptionPane 中显示消息对话框?
- haskell - 有错误折叠的类型类吗?
- python - 如何阻止文件路径和信息显示在 python 脚本执行中
- css - CSS - fa fa 图标样式
- python - 尝试使用 kivy 在 virtualbox ubuntu 中运行我的 python 程序时出现语法错误