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