问题
已知地球上的点E经纬度为(J1, W1),点F经纬度为(J2, W2),求两点间最短的球面距离。
推导
步骤1
假设地球是一个标准的球体,设球心为O, 地球半径为r。
earth_2_point_distance1.png
线段OE, OF, EF构成一个等腰三角形,OE=OF=r,定义∠EOF弧度为δ,定义E,F两点的最短球面距离为L
则有:
L= r*δ根据余弦定理有:
cosδ=\frac {OE^2+OF^2-EF^2} {2*OE*OF}将OE=OF=r代入得:
cosδ=1-{\frac {EF^2} {2*r^2} }δ=arccos(1-{\frac {EF^2} {2*r^2} })最后可得:
L=r*arccos(1-{\frac {EF^2} {2*r^2} }) \tag{1}步骤2
下面来求EF。
earth_2_point_distance.png
图中,B点为北极点,C点和D点位于赤道上,OB,OC,OD构造空间直角坐标系,OCD即赤道面。过E点做垂线垂直于面OCD交于E1点,过F点做垂线垂直于面OCD交于F1点,过F点做垂线垂直于线EE1于F2点。
定义\angle EOE_1弧度为α,\angle FOF_1弧度为β,\angle E_1OF_1弧度为γ,其实α即为E点的纬度弧度,β即为F点的纬度弧度,γ即为F点和E点的经度差的弧度。
勾股定理有:
EF^2=EF_2 ^2 + FF_2 ^2又有:
EF_2=EE_1-FF_1FF_2=E_1F_1则有:
EF^2=(EE_1-FF_1)^2 + E_1F_1^2 \tag{2}\angle OE_1E、\angle OF_1F为直角,则有:
EE_1 = OE*sinα = r*sinα \tag{3}FF_1 = OF*sinβ = r*sinβ \tag{4}根据余弦定理有:
E_1F_1^2=OE_1^2 + OF_1^2 - 2*OE_1*OF_1*cosγ又有:
OE_1=OE*cosα=r*cosαOF_1=OF*cosβ=r*cosβ则有:
E_1F_1^2=r^2*cos^2α + r^2*cos^2β - 2r^2*cosα*cosβ*cosγE_1F_1^2=r^2(cos^2α + cos^2β - 2*cosα*cosβ*cosγ) \tag{5}将公式 (3),(4),(5)代入 (2),并整理得:
EF^2=r^2(sin^2α+cos^2α) + r^2(sin^2β+cos^2β) - 2r^2sinαsinβ - 2r^2cosαcosβcosγEF^2=2r^2(1 - sinαsinβ - cosαcosβcosγ)代入公式(1)得:
L=r*arccos(sinαsinβ + cosαcosβcosγ)