国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

根據(jù)經(jīng)緯度計(jì)算兩地距離

malakashi / 2734人閱讀

摘要:最近工作需要,網(wǎng)上搜索了下根據(jù)經(jīng)緯度計(jì)算兩地距離的方法,發(fā)現(xiàn)要么是幾何法,畫(huà)圖作一堆輔助線,然后證明推理,要么二話不說(shuō)直接套公式。球體上兩地的最短距離就是經(jīng)過(guò)兩點(diǎn)的大圓的劣弧長(zhǎng)度。

最近工作需要,網(wǎng)上搜索了下根據(jù)經(jīng)緯度計(jì)算兩地距離的方法,發(fā)現(xiàn)要么是幾何法,畫(huà)圖、作一堆輔助線,然后證明推理,要么二話不說(shuō)直接套公式。這篇文章介紹一種容易理解的方式來(lái)求這個(gè)距離。

0b00 思路

地球是個(gè)不規(guī)則的橢球體、為了簡(jiǎn)便我們當(dāng)作球體來(lái)計(jì)算。
球體上兩地的最短距離就是經(jīng)過(guò)兩點(diǎn)的大圓的劣弧長(zhǎng)度。

思路如下:

弧長(zhǎng) ← 弦長(zhǎng)(兩點(diǎn)距離) ← 兩點(diǎn)坐標(biāo)(直角坐標(biāo)) ← 經(jīng)緯度
0b01 計(jì)算 1. 坐標(biāo)轉(zhuǎn)換

設(shè)

地球半徑為 $R$

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

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

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

地球表面有一點(diǎn) $A$, 經(jīng)度為 $e$, 緯度為 $n$, 單位為弧度

則 $A$ 的坐標(biāo)可表示為:

$$ 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 {cos, sin, PI} = Math

let getPoint = (e, n) => {
    //首先將角度轉(zhuǎ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. 根據(jù)坐標(biāo)計(jì)算兩點(diǎn)距離

這個(gè)太簡(jiǎn)單,跳過(guò)

3. 根據(jù)弦長(zhǎng)求弧長(zhǎng)

這個(gè)可以畫(huà)個(gè)圖,幫助理解:

現(xiàn)在已知弦長(zhǎng) $c$, 半徑 $R$, 要求弧 $r$ 的長(zhǎng)度
這很簡(jiǎn)單, 只需先求出 $∠alpha$ 的大小 :

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

代碼
const {asin} = Math
const R = 6371

r = asin(c/2/R)*2*R
0b10 最終代碼
/**
 * 獲取兩經(jīng)緯度之間的距離
 * @param {number} e1 點(diǎn)1的東經(jīng), 單位:角度, 如果是西經(jīng)則為負(fù)
 * @param {number} n1 點(diǎn)1的北緯, 單位:角度, 如果是南緯則為負(fù)
 * @param {number} e2
 * @param {number} n2
 */
function getDistance(e1, n1, e2, n2){
    const R = 6371
    const { sin, cos, asin, PI, hypot } = Math
    
    /** 根據(jù)經(jīng)緯度獲取點(diǎn)的坐標(biāo) */
    let getPoint = (e, n) => {
        e *= PI/180
        n *= PI/180
        //這里 R* 被去掉, 相當(dāng)于先求單位圓上兩點(diǎn)的距, 最后會(huì)再將這個(gè)距離放大 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
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97277.html

相關(guān)文章

  • mysql,php和js根據(jù)經(jīng)緯度計(jì)算距離

    摘要:計(jì)算精度與谷歌地圖的距離精度差不多,相差范圍在米以下。以上代碼大部分來(lái)自網(wǎng)上收集,經(jīng)過(guò)驗(yàn)證過(guò)的,可以使用 根據(jù)經(jīng)緯度計(jì)算距離公式 showImg(https://segmentfault.com/img/bV6zX2?w=437&h=76); 圖片來(lái)自互聯(lián)網(wǎng) 對(duì)上面的公式解釋如下: Lung1 Lat1表示A點(diǎn)經(jīng)緯度, Lung2 Lat2表示B點(diǎn)經(jīng)緯度; a=Lat1 – Lat2...

    wanglu1209 評(píng)論0 收藏0
  • mysql,php和js根據(jù)經(jīng)緯度計(jì)算距離

    摘要:計(jì)算精度與谷歌地圖的距離精度差不多,相差范圍在米以下。以上代碼大部分來(lái)自網(wǎng)上收集,經(jīng)過(guò)驗(yàn)證過(guò)的,可以使用 根據(jù)經(jīng)緯度計(jì)算距離公式 showImg(https://segmentfault.com/img/bV6zX2?w=437&h=76); 圖片來(lái)自互聯(lián)網(wǎng) 對(duì)上面的公式解釋如下: Lung1 Lat1表示A點(diǎn)經(jīng)緯度, Lung2 Lat2表示B點(diǎn)經(jīng)緯度; a=Lat1 – Lat2...

    寵來(lái)也 評(píng)論0 收藏0
  • 微信小程序計(jì)算用戶離商家的距離(利用經(jīng)緯度求距)

    摘要:前言最近在幫朋友商家寫(xiě)小程序,所以看了不少關(guān)于小程序的知識(shí),總結(jié)一下計(jì)算距離這條線。 前言 最近在幫朋友(商家)寫(xiě)小程序,所以看了不少關(guān)于小程序的知識(shí),總結(jié)一下計(jì)算距離這條線。 思路 一共有兩種方法,各有利弊:1.利用小程序的wx.getLocation 方法得到用戶的經(jīng)緯度,然后用已知的商家的經(jīng)緯進(jìn)行計(jì)算;2.利用騰訊地圖位置服務(wù)calculateDistance直接計(jì)算 先熟悉下兩...

    huaixiaoz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

malakashi

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<