利用经纬度求解两点球面距离(Haversine formula)
利用经纬度求解两点球面距离
Haversine formula
h(θ)=sin2(θ2)=1−cos(θ)2h(\theta)=sin^2(\frac{\theta}{2})=\frac{1-cos(\theta)}{2}h(θ)=sin2(2θ)=21−cos(θ)
则h(θ)=h(dR)=h(Δβ)+cos(β1)cos(β2)h(Δα)h(\theta)=h(\frac{d}{R})=h(\Delta \beta)+cos(\beta_1)cos(\beta_2)h(\Delta \alpha)h(θ)=h(Rd)=h(Δβ)+cos(β1)cos(β2)h(Δα)
R表示球面半径,d表示球面距离,θ表示两点与圆心夹角弧度R表示球面半径,d表示球面距离,\theta表示两点与圆心夹角弧度R表示球面半径,d表示球面距离,θ表示两点与圆心夹角弧度αi分别表示两点经度,βi表示两点维度,Δ表示差值\alpha_i分别表示两点经度,\beta_i表示两点维度,\Delta表示差值αi分别表示两点经度,βi表示两点维度,Δ表示差值公式全称应该为half−versinehalf-versinehalf−versine,即versine:1−cos(θ)的一半versine: 1-cos(\theta)的一半versine:1−cos(θ)的一半计算时可进一步化解:cos(θ)=sin(β1)sin(β2)+cos(β1)cos(β2)cos(Δα)cos(\theta)=sin(\beta_1)sin(\beta_2)+cos(\beta_1)cos(\beta_2)cos(\Delta \alpha)cos(θ)=sin(β1)sin(β2)+cos(β1)cos(β2)cos(Δα)
这里求AB⌢\overset{\frown}{AB}AB⌢,显然求得∣AB∣|AB|∣AB∣即可
以OEFOEFOEF为例,∠OEF=Δα,∣EF∣=2sin(Δα2)\angle OEF=\Delta \alpha,|EF|=2sin(\frac{\Delta \alpha}{2})∠OEF=Δα,∣EF∣=2sin(2Δα)R,同理利用维度∣AC∣=2sin(Δβ2)R|AC|=2sin(\frac{\Delta \beta}{2})R∣AC∣=2sin(2Δβ)R
而对于∣BC∣,∣AD∣|BC|,|AD|∣BC∣,∣AD∣作AG⊥OE,BH⊥OEAG\perp OE,BH \perp OEAG⊥OE,BH⊥OE可得:∣AD∣=2sin(Δα2)(∣OE∣cos(∠AOG))=2sin(Δα2)Rcos(β1)|AD|=2sin(\frac{\Delta \alpha}{2})(|OE|cos(\angle AOG))=2sin(\frac{\Delta \alpha}{2})Rcos(\beta_1)∣AD∣=2sin(2Δα)(∣OE∣cos(∠AOG))=2sin(2Δα)Rcos(β1)
而四边形ACBDACBDACBD为等腰梯形形
CH=BC−AD2,AB2=BH2+AH2=(BC−CH)2+AC2−CH2=AC2+BC∗ADCH=\frac{BC-AD}{2},AB^2=BH^2+AH^2=(BC-CH)^2+AC^2-CH^2=AC^2+BC*ADCH=2BC−AD,AB2=BH2+AH2=(BC−CH)2+AC2−CH2=AC2+BC∗AD
∣AB∣2=4sin2(Δβ2)R2+4sin2(Δα2)cos(β1)cos(β2)R2|AB|^2=4sin^2(\frac{\Delta \beta}{2})R^2+4sin^2(\frac{\Delta \alpha}{2})cos(\beta_1)cos(\beta_2)R^2∣AB∣2=4sin2(2Δβ)R2+4sin2(2Δα)cos(β1)cos(β2)R2
而要求解的θ=∠AOB,∣AB∣2=4sin2(θ2)R2\theta=\angle AOB,|AB|^2=4sin^2(\frac{\theta}{2})R^2θ=∠AOB,∣AB∣2=4sin2(2θ)R2
得到目标公式h(θ)=h(Δβ)+cos(β1)cos(β2)h(Δα),AB⌢=d=Rθh(\theta)=h(\Delta \beta)+cos(\beta_1)cos(\beta_2)h(\Delta \alpha),\overset{\frown}{AB}=d=R\thetah(θ)=h(Δβ)+cos(β1)cos(β2)h(Δα),AB⌢=d=Rθ
进一步化解1−cos(θ)=1−cos(Δβ)+cos(β1)cos(β2)(1−cos(Δα))1-cos(\theta)=1-cos(\Delta\beta) +cos(\beta_1)cos(\beta_2)(1-cos(\Delta \alpha))1−cos(θ)=1−cos(Δβ)+cos(β1)cos(β2)(1−cos(Δα))
cos(Δβ)=cos(β1)cos(β2)+sin(β1)sin(β2)cos(\Delta \beta)=cos(\beta_1)cos(\beta_2)+sin(\beta_1)sin(\beta_2)cos(Δβ)=cos(β1)cos(β2)+sin(β1)sin(β2)
可得cos(θ)=sin(β1)sin(β2)+cos(β1)cos(β2)cos(Δα)cos(\theta)=sin(\beta_1)sin(\beta_2)+cos(\beta_1)cos(\beta_2)cos(\Delta \alpha)cos(θ)=sin(β1)sin(β2)+cos(β1)cos(β2)cos(Δα)