思路:
- 将点的经纬度坐标转换三维的直角坐标
- 根据空间中向量乘积公式
a.b=∣a∣.∣b∣cosθ,得到两个点之间的角度
- 再根据圆弧长与圆角之间的关系
lab=rθ,得到两个点的球面距离
如下所示
其中A、B是球面上的两个点,O是球心,平面XOY是赤道平面,X轴方向表示0度经线,Y轴方向表示90度经线,Z轴表示北极方向。
D是A点在赤道平面的投影, ∠AOD表示A点的维度
WA,∠XOD表示A点的经度
JA。
C是B点在赤道平面的投影, ∠BOC表示B点的维度
WB,∠XOC表示B点的经度
JB。
第1步:坐标转换
xA=∣OD∣.cos(∠XOD)=∣OA∣.cos(∠AOD).cos(∠XOD)=r.cosWA.cosJAyA=∣OD∣.sin(∠XOD)=∣OA∣.cos(∠AOD).sin(∠XOD)=r.cosWA.sinJAzA=∣AD∣=∣OA∣.sin(∠AOD)=r.sinWA
上面
r表示地球半径, 同理可得B点的三维坐标
xB=∣OC∣.cos(∠XOC)=∣OB∣.cos(∠BOC).cos(∠XOC)=r.cosWB.cosJByB=∣OC∣.sin(∠XOC)=∣OB∣.cos(∠BOC).sin(∠XOC)=r.cosWB.sinJBzB=∣AD∣=∣OB∣.sin(∠BOC)=r.sinWB
第2步:求解
θ角度
根据空间中向量乘积公式
OA
.OB
=∣OA∣.∣OB∣cosθ,得到AB两个点之间的角度
cosθ=∣OA∣.∣OB∣OA
.OB
=r2OA
.OB
OA
.OB
=xA.xB+yA.yB+zA.zB=r.cosWA.cosJA.r.cosWB.cosJB+r.cosWA.sinJA.r.cosWB.sinJB+r.sinWA.r.sinWB=r2.cosWA.cosWB.(cosJA.cosJB+sinJA.sinJB)+r2.sinWA.sinWB=r2.cosWA.cosWB.cos(JA−JB)+r2.sinWA.sinWB
得到
cosθ=cosWA.cosWB.cos(JA−JB)+sinWA.sinWB
第3步:求解AB两点的球面距离
根据圆弧长与圆角之间的关系
lab=rθ,得到
lAB=r.θ=r.arccos(cosWA.cosWB.cos(JA−JB)+sinWA.sinWB)