标签: java algorithm math geo
我想使用here描述的解决方案来计算两个地理位置(由纬度和经度对定义)之间的距离。
即使我了解一般概念,首先将所有球形(纬/长)坐标预先转换为3D单位长度笛卡尔坐标的部分对于我来说还是有问题的。
有人可以解释一下我们为达到上述目的而编写的算法吗? Java是完美的,但是伪代码也可以。
更新:我对Haversine方法不感兴趣。
答案 0 :(得分:1)
让我们从转换为球坐标开始。请注意,纬度/经度与球坐标中的角度几乎相同。唯一的区别是,与phi不同,纬度不是从北极开始,而是从赤道开始。
phi
因此,如果纬度等于+90(90°N),则相应的phi角度为0°,当纬度等于-90(90°S)时,则phi的角度为180°。>
phi = -latitude + 90° theta = longitude rho = 1
现在,您可以转到笛卡尔:
但是在您的情况下,rho = 1,
rho = 1
x = sin(theta)*cos(phi); y = sin(theta)*sin(phi); z = cos(theta);
其中phi和theta的定义如上。
theta