基于笛卡尔坐标点积的算法计算地理距离
Calculating geographical distance using algorithm based on dot product of Cartesian coordinates
我想使用 here 中描述的解决方案计算两个地理点(由纬度和经度对定义)之间的距离。
尽管我了解一般概念,但首先将所有球面 (lat/long) 坐标预转换为 3D 单位长度笛卡尔坐标的部分 存在问题对我来说。
有人可以解释一下我们需要编写的算法来实现上述目标吗? Java 会很完美,但伪代码也可以。
更新:我对 Haversine 方法不感兴趣。
让我们从转换到球坐标开始。观察 latitude/longitude 几乎与球坐标中的角度相同。唯一的区别是,与 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);
其中 phi
和 theta
定义如上。
我想使用 here 中描述的解决方案计算两个地理点(由纬度和经度对定义)之间的距离。
尽管我了解一般概念,但首先将所有球面 (lat/long) 坐标预转换为 3D 单位长度笛卡尔坐标的部分 存在问题对我来说。
有人可以解释一下我们需要编写的算法来实现上述目标吗? Java 会很完美,但伪代码也可以。
更新:我对 Haversine 方法不感兴趣。
让我们从转换到球坐标开始。观察 latitude/longitude 几乎与球坐标中的角度相同。唯一的区别是,与 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);
其中 phi
和 theta
定义如上。