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

Posted

技术标签:

【中文标题】基于笛卡尔坐标点积的算法计算地理距离【英文标题】:Calculating geographical distance using algorithm based on dot product of Cartesian coordinates 【发布时间】:2019-03-31 16:00:58 【问题描述】:

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

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

有人能解释一下我们为实现上述目标而需要编写的算法吗? Java 会是完美的,但伪代码也可以。

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

【问题讨论】:

虽然不完全是重复的,但我认为您会对这个问题及其答案感兴趣:***.com/questions/3694380/… 【参考方案1】:

让我们从转换到球坐标开始。观察纬度/经度几乎与球坐标中的角度相同。唯一不同的是,与phi不同,纬度不是从北极开始,而是从赤道开始。

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

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

现在,你可以去笛卡尔了:

但在你的情况下rho = 1,所以

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

其中phitheta 的定义如上。

【讨论】:

以上是关于基于笛卡尔坐标点积的算法计算地理距离的主要内容,如果未能解决你的问题,请参考以下文章

Javascript - 计算围绕中心点的四个角的地理坐标点

怎么计算2个坐标点的距离?

如何计算两个GPS坐标点的距离?

如何判断一个地理坐标点在一个地理坐标多边形中?

C# 计算地图上某个坐标点的到多边形各边的距离

百度地图Api 根据两个坐标点计算距离