红月公益电竞活动中心

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

2025-10-31 01:42:49 公益赛事 633

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

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(Δα)