javascript通過經緯度來計算兩地之間的距離

來源:互聯網
上載者:User
javascript如何來計算兩個地方之間的距離?我相信會有很多種方法都可以實現,接下來的這篇文章就給大家來介紹javascript通過經緯度來計算兩地之間的距離。

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

思路

地球是個不規則的橢球體、為了簡便我們當作球體來計算。
球體上兩地的最短距離就是經過兩點的大圓的劣弧長度。

思路如下:

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

計算

1. 座標轉換

設:

地球半徑為 $R$

地心到 E 0° N 0° 的連線為 x 軸

地心到 E 90° N 0° 的連線為 y 軸

地心到 E 0° N 90° 的連線為 Z 軸

地球表面有一點 $A$, 經度為 $e$, 緯度為 $n$, 單位為弧度

則 $A$ 的座標可表示為:

$$x = R \cdot cos(n) \cdot cos(e)\\y = R \cdot cos(n) \cdot sin(e)\\z = R \cdot sin(n)$$

代碼

const R = 6371const {cos, sin, PI} = Mathlet getPoint = (e, n) => {    //首先將角度轉為弧度    e *= PI/180    n *= PI/180    reutrn {        x: R*cos(n)*cos(e),        y: R*cos(n)*sin(e),        z: R*sin(n)    }}

2. 根據座標計算兩點距離

這個太簡單,跳過

3. 根據弦長求弧長

這個可以畫個圖,協助理解:

現在已知弦長 $c$, 半徑 $R$, 要求弧 $r$ 的長度
這很簡單, 只需先求出 $∠\alpha$ 的大小 :

$$\alpha = \arcsin(c/2/R)\\r = 2\alpha \cdot R$$

代碼

const {asin} = Mathconst R = 6371r = asin(c/2/R)*2*R

最終代碼

/** * 擷取兩經緯度之間的距離 * @param {number} e1 點1的東經, 單位:角度, 如果是西經則為負 * @param {number} n1 點1的北緯, 單位:角度, 如果是南緯則為負 * @param {number} e2 * @param {number} n2 */function getDistance(e1, n1, e2, n2){    const R = 6371    const { sin, cos, asin, PI, hypot } = Math        /** 根據經緯度擷取點的座標 */    let getPoint = (e, n) => {        e *= PI/180        n *= PI/180        //這裡 R* 被去掉, 相當於先求單位圓上兩點的距, 最後會再將這個距離放大 R 倍        return {x: cos(n)*cos(e), y: cos(n)*sin(e), z: sin(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}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.