经常访问地图,如果知道地图上的两个点,如何计算两点之间的距离?
首先过这两点及地球球心做一个圆,如下图(地球球心O,待测距的两个点A,B,假设地球半径为R):
从上图可以看出,AB地图上的间距(曲面)为: R*2*alpha (alpha为弧度) (公式1)
那么核心的问题就是计算alpha。
由图像知: AB=R*sin(alpha)*2 (公式2)
AB就是空间中两点间的距离(假设点A的三维坐标为Ax,Ay,Az;B的三维坐标为Bx,By,Bz,),
计算公式为 sqrt((Ax-Bx)^2+(Ay-By)^2+(Az-Bz)^2); (公式3)
空间的一个点A(如下图)
A点在xOz平面投影B,在y轴投影D点,通过B点对x轴作垂线相交于C点,通过B点对z轴作垂线相交于E点。
OAD夹角为bata,BOx夹角为gama,
则beta即为地图上A点的纬度
gama即为地图上A点的纬度
OA为地球半径R,OB=R*cos(beta) 注意角度弧度转换
A点坐标为 Ay=R*sin(beta), Ax=R*cos(beta)*cos(gama),Az=R*cos(beta)*sin(gama)
带入公式3 :
R*sin(alpha)*2=sqrt((Ax-Bx)^2+(Ay-By)^2+(Az-Bz)^2);
由此计算出 :alpha
然后 AB球面距离 R*2*alpha