利用经纬度求解两点球面距离


Haversine formula

h(θ)=sin2(θ2)=1cos(θ)2h(\theta)=sin^2(\frac{\theta}{2})=\frac{1-cos(\theta)}{2}

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)

  • R,d,θR表示球面半径,d表示球面距离,\theta表示两点与圆心夹角弧度
  • αi,βi,Δ\alpha_i分别表示两点经度,\beta_i表示两点维度,\Delta表示差值
  • 公式全称应该为halfversinehalf-versine,即versine:1cos(θ)versine: 1-cos(\theta)的一半
  • 计算时可进一步化解: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)

利用经纬度求解两点球面距离(Haversine formula)

这里求AB\overset{\frown}{AB},显然求得AB|AB|即可

OEFOEF为例,OEF=Δα,EF=2sin(Δα2)\angle OEF=\Delta \alpha,|EF|=2sin(\frac{\Delta \alpha}{2})R,同理利用维度AC=2sin(Δβ2)R|AC|=2sin(\frac{\Delta \beta}{2})R

而对于BC,AD|BC|,|AD|AGOE,BHOEAG\perp OE,BH \perp OE可得:AD=2sin(Δα2)(OEcos(AOG))=2sin(Δα2)Rcos(β1)|AD|=2sin(\frac{\Delta \alpha}{2})(|OE|cos(\angle AOG))=2sin(\frac{\Delta \alpha}{2})Rcos(\beta_1)

而四边形ACBDACBD为等腰梯形形

CH=BCAD2,AB2=BH2+AH2=(BCCH)2+AC2CH2=AC2+BCADCH=\frac{BC-AD}{2},AB^2=BH^2+AH^2=(BC-CH)^2+AC^2-CH^2=AC^2+BC*AD

AB2=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

而要求解的θ=AOB,AB2=4sin2(θ2)R2\theta=\angle AOB,|AB|^2=4sin^2(\frac{\theta}{2})R^2

得到目标公式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\theta

进一步化解1cos(θ)=1cos(Δβ)+cos(β1)cos(β2)(1cos(Δα))1-cos(\theta)=1-cos(\Delta\beta) +cos(\beta_1)cos(\beta_2)(1-cos(\Delta \alpha))

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(θ)=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)

相关文章: