首頁 > 常見問題 > 【數學公式及推導】根據經緯度計算地面兩點間的距離

【數學公式及推導】根據經緯度計算地面兩點間的距離

藏色散人
發布: 2020-10-22 11:39:09
轉載
3644 人瀏覽過

1.假設:地球是正球體。地面兩點A和B的經緯度座標分別為(Aj,Aw)和(Bj,Bw),地球半徑R取平均值6371km。

2.建立三維直角座標系

地球球心為原點O,地軸為Z軸,北極方向為Z軸正方向,赤道平面為X軸和Y軸所在平面,在該平面上地心到零度經線的方向為X軸正方向,依右手定則決定Y軸正方向。

設點A的三維座標為(Ax,Ay,Az),點B的三維座標為(Bx,By,Bz)

3.思路

A、B、O三點所在平面與地球相交形成半徑為R的圓,求AB間的地面距離就是求該圓上圓弧AB的長度。可由弧長等於半徑乘以圓心角公式求得。

由於R是確定的,只要得到OA與OB的夾角θ就可以得到弧AB的長度。弧AB=R*θ。
角θ可由向量公式求:

向量OA*向量OB=|OA||OB|cosθ。

cosθ=向量OA*向量OB/|OA||OB|
     =(Ax*Bx+Ay*By+Az*Bz)/R*R
登入後複製

4.用經緯度座標表示三維直角座標:

Ax=R*cosAw*cosAj
Ay=R*cosAw*sinAj
Az=R*sinAw
Bx=R*cosBw*cosBj
By=R*cosBw*sinBj
Bz=R*sinBw
登入後複製

代入可得

cosθ=cosAw*cosAj*cosBw*cosBj+cosAw*sinAj*cosBw*sinBj+sinAw*sinBw
     =cosAw*cosBw(cosAj*cosBj+sinAj*sinBj)+sinAw*sinBw
     =cosAw*cosBw*cos(Aj-Bj)+sinAw*sinBw
θ=arccos[cosAw*cosBw*cos(Aj-Bj)+sinAw*sinBw]
登入後複製

5.綜上可得根據經緯度計算地面兩點間距離的公式:

弧AB=R*arccos[cosAw*cosBw*cos(Aj-Bj)+sinAw*sinBw]
登入後複製

說明:

類似的公式推導大家以前都做過,時間久了可能會忘記一些東西,於是我把它記了下來,以備查閱。

由於三角函數變換多端,該公式的表現形式不只一種,只要前提假設是一樣的,那麼在數學上應該是等價並可相互推導的。
在實際程式碼中用的時候需要注意單位問題,例如從定位器獲得的經緯度單位是度,而三角計算的方法很可能用的單位是弧度,再例如長度單位用的是km還是m等。

推薦:《程式設計影片

以上是【數學公式及推導】根據經緯度計算地面兩點間的距離的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板