最近工作需要,網上搜尋了下根據經緯度計算兩地距離的方法,發現要麼是幾何法,畫圖、作一堆輔助線,然後證明推理,要麼二話不說直接套公式。這篇文章介紹一種容易理解的方式來求這個距離。
地球是個不規則的橢球體、為了簡便我們當作球體來計算。
球體上兩地的最短距離就是經過兩點的大圓的劣弧長度。
思路如下:
弧長 ← 弦長(兩點距離) ← 兩點座標(直角座標) ← 經緯度
設
則 $a$ 的座標可表示為:
$$ x = r \cdot cos(n) \cdot cos(e)\\ y = r \cdot cos(n) \cdot sin(e)\\ z = r \cdot sin(n) $$
**
const r = 6371
const = math
let getpoint = (e, n) =>
}
這個太簡單,跳過
這個可以畫個圖,幫助理解:
現在已知弦長 $c$, 半徑 $r$, 要求弧 $r$ 的長度
這很簡單, 只需先求出 $∠\alpha$ 的大小 :
$$ \alpha = \arcsin(c/2/r)\\ r = 2\alpha \cdot r $$
**
const = math
const r = 6371
r = asin(c/2/r)*2*r
/**
* 獲取兩經緯度之間的距離
* @param e1 點1的東經, 單位:角度, 如果是西經則為負
* @param n1 點1的北緯, 單位:角度, 如果是南緯則為負
* @param e2
* @param n2
*/function getdistance(e1, n1, e2, n2) = math
/** 根據經緯度獲取點的座標 */
let getpoint = (e, n) =>
}let a = getpoint(e1, n1)
let b = getpoint(e2, n2)
let c = hypot(a.x - b.x, a.y - b.y, a.z - b.z)
let r = asin(c/2)*2*r
return r
}
mysql根據經緯度求兩地距離
1.兩點距離 1.4142135623730951 select st distance point 0,0 point 1,1 select st distance point 120.10591,30.30163 point 120.13026,30.25961 mysql 5.6 新增 2.兩...
PHP根據經緯度計算兩地之間的距離
php計算兩點的距離,無外乎兩種方法 一種是呼叫地圖介面,其次是純數學計算 計算球面上兩個點之間的距離 方法一 呼叫介面 地圖api會有自己的演算法,可能會根據實際情況路線計算距離,比如說不能直接直線到達,需要繞行,會計算繞行的路線的長度。但缺點是需要開發金鑰 key 而且一般來說每天會有請求次數限...
PHP根據經緯度計算兩地之間的距離
php計算兩點的距離,無外乎兩種方法 一種是呼叫地圖介面,其次是純數學計算 計算球面上兩個點之間的距離 方法一 呼叫介面 地圖api會有自己的演算法,可能會根據實際情況路線計算距離,比如說不能直接直線到達,需要繞行,會計算繞行的路線的長度。但缺點是需要開發金鑰 key 而且一般來說每天會有請求次數限...