通过向量乘积推导地球两点之间的球面距离

思路:
  • 将点的经纬度坐标转换三维的直角坐标
  • 根据空间中向量乘积公式 a . b = a . b cos θ a.b=|a|.|b|\cos{\theta} ,得到两个点之间的角度
  • 再根据圆弧长与圆角之间的关系 l a b = r θ l_{ab}=r\theta ,得到两个点的球面距离

如下所示
在这里插入图片描述
其中A、B是球面上的两个点,O是球心,平面XOY是赤道平面,X轴方向表示0度经线,Y轴方向表示90度经线,Z轴表示北极方向。
D是A点在赤道平面的投影, ∠AOD表示A点的维度 W A W_A ,∠XOD表示A点的经度 J A J_A
C是B点在赤道平面的投影, ∠BOC表示B点的维度 W B W_B ,∠XOC表示B点的经度 J B J_B

第1步:坐标转换

x A = O D . cos ( X O D ) = O A . cos ( A O D ) . cos ( X O D ) = r . cos W A . cos J A y A = O D . sin ( X O D ) = O A . cos ( A O D ) . sin ( X O D ) = r . cos W A . sin J A z A = A D = O A . sin ( A O D ) = r . sin W A x_A=|OD|.\cos{(∠XOD)}=|OA|.\cos{(∠AOD)}.\cos{(∠XOD)}=r.\cos{W_A}.\cos{J_A} \\ y_A=|OD|.\sin{(∠XOD)}=|OA|.\cos{(∠AOD)}.\sin{(∠XOD)}=r.\cos{W_A}.\sin{J_A} \\ z_A=|AD|=|OA|.\sin{(∠AOD)}=r.\sin{W_A}

上面 r r 表示地球半径, 同理可得B点的三维坐标
x B = O C . cos ( X O C ) = O B . cos ( B O C ) . cos ( X O C ) = r . cos W B . cos J B y B = O C . sin ( X O C ) = O B . cos ( B O C ) . sin ( X O C ) = r . cos W B . sin J B z B = A D = O B . sin ( B O C ) = r . sin W B x_B=|OC|.\cos{(∠XOC)}=|OB|.\cos{(∠BOC)}.\cos{(∠XOC)}=r.\cos{W_B}.\cos{J_B} \\ y_B=|OC|.\sin{(∠XOC)}=|OB|.\cos{(∠BOC)}.\sin{(∠XOC)}=r.\cos{W_B}.\sin{J_B} \\ z_B=|AD|=|OB|.\sin{(∠BOC)}=r.\sin{W_B}

第2步:求解 θ \theta 角度

根据空间中向量乘积公式 O A . O B = O A . O B cos θ \overrightarrow{OA}.\overrightarrow{OB}=|OA|.|OB|\cos{\theta} ,得到AB两个点之间的角度
cos θ = O A . O B O A . O B = O A . O B r 2 \cos{\theta}=\frac{\overrightarrow{OA}.\overrightarrow{OB}}{|OA|.|OB|}=\frac{\overrightarrow{OA}.\overrightarrow{OB}}{r^2}

O A . O B = x A . x B + y A . y B + z A . z B = r . cos W A . cos J A . r . cos W B . cos J B + r . cos W A . sin J A . r . cos W B . sin J B + r . sin W A . r . sin W B = r 2 . cos W A . cos W B . ( cos J A . cos J B + sin J A . sin J B ) + r 2 . sin W A . sin W B = r 2 . cos W A . cos W B . cos ( J A J B ) + r 2 . sin W A . sin W B \overrightarrow{OA}.\overrightarrow{OB}=x_A.x_B+y_A.y_B+z_A.z_B\\ =r.\cos{W_A}.\cos{J_A}.r.\cos{W_B}.\cos{J_B} +\\ r.\cos{W_A}.\sin{J_A} .r.\cos{W_B}.\sin{J_B} + r.\sin{W_A}.r.\sin{W_B}\\ =r^2.\cos{W_A}.\cos{W_B}.(\cos{J_A}.\cos{J_B}+\sin{J_A}.\sin{J_B})+r^2.\sin{W_A}.\sin{W_B}\\ =r^2.\cos{W_A}.\cos{W_B}.\cos({J_A-J_B}) +r^2.\sin{W_A}.\sin{W_B}

得到

cos θ = cos W A . cos W B . cos ( J A J B ) + sin W A . sin W B \cos{\theta}=\cos{W_A}.\cos{W_B}.\cos({J_A-J_B}) +\sin{W_A}.\sin{W_B}

第3步:求解AB两点的球面距离

根据圆弧长与圆角之间的关系 l a b = r θ l_{ab}=r\theta ,得到
l A B = r . θ = r . arccos ( cos W A . cos W B . cos ( J A J B ) + sin W A . sin W B ) l_{AB}=r.\theta=r.\arccos({\cos{W_A}.\cos{W_B}.\cos({J_A-J_B}) +\sin{W_A}.\sin{W_B}})