摘要:獲取地球兩點的距離最近在做小程序的時候遇到要計算兩點之間的距離但小程序沒有相關的方法只好自己來了背景知識地球的半徑地球雖然是個橢圓但也極像個正圓相差大概公里所以就按正圓來算了半徑是公里弧長公式弧度圓心角度數余弦定律模型思路假設求兩點的距
獲取地球兩點的距離
最近在做小程序的時候遇到要計算兩點之間的距離,但小程序沒有相關的方法,只好自己來了.
背景知識 地球的半徑地球雖然是個橢圓,但也極像個正圓(相差大概20公里),所以就按正圓來算了,半徑是6371.393公里.
弧長公式L = 弧度 * R = 圓心角度數 × π × R / 180
余弦定律2abcosC=a^2+b^2-c^2
c^2 = a^2+b^2-2abcosC
假設求A,B兩點的距離,半徑已經知道了,
現在只需求∠AOB弧度.
但∠AOB弧度可以通過AB的長度獲得
運算過程根據上面的圖算
假設A坐標(JA,WA),B坐標(JB,WB).
即∠AOC = WA, ∠BOD = WB.
根據三角形函數
AC = sin(WA) R, BD = sin(WB) R
所以 BE = BD - AC
因為∠COD = (JB - JA), 根據余弦定律
CO = cos(WA) R, DO = cos(WB) R
所以 AE = CD = 根號[CO^2 + DO^2 - 2 CO DO * cos(∠COD)]
根據勾股定律
AB^2 = AE^2 + BE^2
因為?AOB是等腰三角形,三線合一,GO為垂直平分線
AB^2 = 2R^2 - 2R^2 * cosC;
cosC = [2R^2 - AB^2] / 2R^2;
簡化的
∠AOB弧度 = acos[sin(WA)sin(WB) + cos(WA)cos(WB)cos(JB-JA)]
L = ∠AOB弧度 * R
代碼function _Radian(num) { return num * Math.PI / 180; } function CalculateDistance(lata, lnga, latb, lngb) { var earthR = 6371.393; var WA, WB; WA = _Radian(lata); WB = _Radian(latb); var lngMinus = Math.abs(lngb - lnga) > 180? 360 - Math.abs(lngb - lnga): Math.abs(lngb - lnga); var lngRadian = _Radian(lngMinus); var ANGLE = Math.sin(WA) * Math.sin(WB) + Math.cos(WA) * Math.cos(WB) * Math.cos(lngRadian); var L = Math.acos(ANGLE) * earthR; return L; }
用_Radian發角度轉化為弧度.
因為取兩點的最小值,所以但經度之間差大于180時,再用360 - 經度差,取最小經度差.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89577.html
摘要:最近工作需要,網上搜索了下根據經緯度計算兩地距離的方法,發現要么是幾何法,畫圖作一堆輔助線,然后證明推理,要么二話不說直接套公式。球體上兩地的最短距離就是經過兩點的大圓的劣弧長度。 最近工作需要,網上搜索了下根據經緯度計算兩地距離的方法,發現要么是幾何法,畫圖、作一堆輔助線,然后證明推理,要么二話不說直接套公式。這篇文章介紹一種容易理解的方式來求這個距離。 0b00 思路 地球是個不規...
摘要:計算精度與谷歌地圖的距離精度差不多,相差范圍在米以下。以上代碼大部分來自網上收集,經過驗證過的,可以使用 根據經緯度計算距離公式 showImg(https://segmentfault.com/img/bV6zX2?w=437&h=76); 圖片來自互聯網 對上面的公式解釋如下: Lung1 Lat1表示A點經緯度, Lung2 Lat2表示B點經緯度; a=Lat1 – Lat2...
摘要:計算精度與谷歌地圖的距離精度差不多,相差范圍在米以下。以上代碼大部分來自網上收集,經過驗證過的,可以使用 根據經緯度計算距離公式 showImg(https://segmentfault.com/img/bV6zX2?w=437&h=76); 圖片來自互聯網 對上面的公式解釋如下: Lung1 Lat1表示A點經緯度, Lung2 Lat2表示B點經緯度; a=Lat1 – Lat2...
閱讀 1672·2021-09-26 10:00
閱讀 2935·2021-09-06 15:00
閱讀 3538·2021-09-04 16:40
閱讀 2298·2019-08-30 15:44
閱讀 715·2019-08-30 10:59
閱讀 1883·2019-08-29 18:34
閱讀 3616·2019-08-29 15:42
閱讀 2292·2019-08-29 15:36