使用基于笛卡尔坐标点积的算法计算地理距离

时间:2018-10-26 21:16:03

标签: java algorithm math geo

我想使用here描述的解决方案来计算两个地理位置(由纬度和经度对定义)之间的距离。

即使我了解一般概念,首先将所有球形(纬/长)坐标预先转换为3D单位长度笛卡尔坐标的部分对于我来说还是有问题的。

有人可以解释一下我们为达到上述目的而编写的算法吗? Java是完美的,但是伪代码也可以。

更新:我对Haversine方法不感兴趣。

1 个答案:

答案 0 :(得分:1)

让我们从转换为球坐标开始。请注意,纬度/经度与球坐标中的角度几乎相同。唯一的区别是,与phi不同,纬度不是从北极开始,而是从赤道开始。

enter image description here

因此,如果纬度等于+90(90°N),则相应的phi角度为0°,当纬度等于-90(90°S)时,则phi的角度为180°。

phi   = -latitude + 90°
theta =  longitude
rho   = 1

现在,您可以转到笛卡尔:

x=rho*sin(theta)*cos(phi); y = rho*sin(theta)*sin(phi); z = rho*cos(theta);

但是在您的情况下,rho = 1

x = sin(theta)*cos(phi);
y = sin(theta)*sin(phi);
z = cos(theta);

其中phitheta的定义如上。