根據經緯度計算兩地距離

2021-09-13 09:44:25 字數 1271 閱讀 1483

最近工作需要,網上搜尋了下根據經緯度計算兩地距離的方法,發現要麼是幾何法,畫圖、作一堆輔助線,然後證明推理,要麼二話不說直接套公式。這篇文章介紹一種容易理解的方式來求這個距離。

地球是個不規則的橢球體、為了簡便我們當作球體來計算。

球體上兩地的最短距離就是經過兩點的大圓的劣弧長度。

思路如下:

弧長 ← 弦長(兩點距離) ← 兩點座標(直角座標) ← 經緯度

則 $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 而且一般來說每天會有請求次數限...