<bdo id="ks4iu"><del id="ks4iu"></del></bdo>
  • 
    <pre id="ks4iu"></pre>
  • <bdo id="ks4iu"><del id="ks4iu"></del></bdo>
    <input id="ks4iu"><em id="ks4iu"></em></input>
    
    
  • <center id="ks4iu"><cite id="ks4iu"></cite></center>
  • 首頁 > 空調 >

    vue 實現高德坐標轉GPS坐標

    首先介紹一下常見的幾種地圖的坐標類型:

    WGS-84

    :這是一個國際標準,也就是GPS坐標(Google Earth、或者GPS模塊采集的都是這個類型)。

    GCJ-02

    :中國坐標偏移標準,像是Google Map、高德、騰訊地圖都是采用這種坐標展示。

    BD-09

    :百度坐標偏移標準,百度地圖專用的便宜標準。

    所以說這篇博文主要是實現GCJ-02坐標轉換成WGS-84坐標。

    什么時候會用到需要解決坐標轉換的問題呢?起因是一個demo,它使用GPS模塊采集經緯度數據,然后使用高德地圖進行轉換,是的,高德地圖官方提供了API,實現了GPS坐標轉換到高德坐標進行展示,也就是WGS-84轉GCJ-02高德官方已經支持了,看下面。

    高德坐標轉換地址(點這里)

    通過高德官方提供的兩個案例可以實現GPS坐標轉換/批量轉換成高德坐標展示,但是這種API接口是有訪問次數限制的,當日訪問次數超限額,是會被禁止訪問轉換的,所以說如果轉換的坐標過多,盡量使用批量,不要一個一個的轉換浪費次數。

    但是比如說這樣一個功能,我需要根據當前地圖可視化范圍,獲取當前可視化范圍的點,這樣可能會出現問題,因為查詢的點是GPS坐標,但是傳給后臺的可視化范圍是高德坐標,兩個坐標不統一,就會出現坐標偏差,效果就不是特別的好。

    因此,就需要將可視化范圍的東北角坐標和西南角坐標轉換成GPS坐標在傳給后臺過濾,這樣的話,可以將誤差縮到最小。

    這種轉換的代碼在網上很多,各式各樣的都存在,但是有的效果不是特別的好,然后我找了一個測試了一下,感覺效果還是可以的,起碼我能接受,需要的話看一下最后的效果圖,如果接受的話,可以用起來。

    首先有一個封裝好的js文件,里面的代碼就是下面的代碼。

    /**

    * 高德地圖坐標轉GPS坐標算法

    */

    //定義一些常量

    const PI = 3.1415926535897932384626;

    const a = 6378245.0; //長半軸

    const ee = 0.00669342162296594323; //扁率

    /**

    * GCJ02 轉換為 WGS84

    * @param lng

    * @param lat

    * @returns {*[]}

    */

    function gcj02towgs84(lng, lat) {

    lat = +lat

    lng = +lng

    if (out_of_china(lng, lat)) {

    return [lng, lat]

    } else {

    let dlat = transformlat(lng - 105.0, lat - 35.0)

    let dlng = transformlng(lng - 105.0, lat - 35.0)

    let radlat = lat / 180.0 * PI

    let magic = Math.sin(radlat)

    magic = 1 - ee * magic * magic

    let sqrtmagic = Math.sqrt(magic)

    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)

    dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)

    let mglat = lat + dlat

    let mglng = lng + dlng

    return [lng * 2 - mglng, lat * 2 - mglat]

    }

    }

    /**

    * WGS84 轉換為 GCJ02

    * @param lng

    * @param lat

    * @returns {*[]}

    */

    function wgs84togcj02(lng, lat) {

    lat = +lat

    lng = +lng

    if (out_of_china(lng, lat)) {

    return [lng, lat]

    } else {

    let dlat = transformlat(lng - 105.0, lat - 35.0)

    let dlng = transformlng(lng - 105.0, lat - 35.0)

    let radlat = lat / 180.0 * PI

    let magic = Math.sin(radlat)

    magic = 1 - ee * magic * magic

    let sqrtmagic = Math.sqrt(magic)

    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)

    dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)

    return [lng + dlng, lat + dlat]

    }

    }

    /**

    * 判斷是否在國內,不在國內則不做偏移

    * @param lng

    * @param lat

    * @returns {boolean}

    */

    function out_of_china(lng, lat) {

    lat = +lat

    lng = +lng

    // 緯度3.86~53.55,經度73.66~135.05

    return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55)

    }

    function transformlat(lng, lat) {

    lat = +lat

    lng = +lng

    let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng))

    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0

    ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0

    ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0

    return ret

    }

    function transformlng(lng, lat) {

    lat = +lat

    lng = +lng

    let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng))

    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0

    ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0

    ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0

    return ret

    }

    export {

    gcj02towgs84

    }

    就這些,然后用法大概都知道,就不詳細說了。

    我特意轉換試了一下誤差,我先找了一個原始的高德坐標,然后把這個高德坐標通過上面的代碼轉成GPS的坐標,然后又把轉成的GPS坐標再使用高德官方提供的方法轉回高德坐標,我感覺前后兩個高德坐標是差不多的,起碼誤差我能接受。

    下面是來回轉換的效果圖。

    然后封裝的方法有 WGS84 轉 GCJ02 的,也有 GCJ02 轉 WGS84的,需要啥自己用。可以不用高德的,畢竟訪問次數有限制,而且批量轉化的坐標點多了還會出問題,畢竟是get請求嘛,加油!

    責任編輯:Rex_08

    關鍵詞: Earth magic @param
    推薦閱讀
    欧美国产在线一区,免费看成年视频网页,国产亚洲福利精品一区,亚洲一区二区约美女探花
    <bdo id="ks4iu"><del id="ks4iu"></del></bdo>
  • 
    <pre id="ks4iu"></pre>
  • <bdo id="ks4iu"><del id="ks4iu"></del></bdo>
    <input id="ks4iu"><em id="ks4iu"></em></input>
    
    
  • <center id="ks4iu"><cite id="ks4iu"></cite></center>
  • 主站蜘蛛池模板: 午夜网站在线观看免费网址免费| 工囗番漫画全彩无遮挡| 国产成人精品视频网站| 国产乱码一区二区三区| 久久精品国产一区二区三区| 1024手机在线播放视频| 欧美人与zoxxxx视频| 国产精品国语对白露脸在线播放| 亚洲精品欧美日韩| 99re久久在热线播放最新地址| 波多野结衣久久高清免费| 国内精品久久久人妻中文字幕| 亚洲精品国产第1页| 91大神娇喘女神疯狂在线| 欧美极品少妇无套实战| 国产精品国产三级国产普通话 | 日日摸日日碰夜夜爽97纠| 国产精品午夜高清在线观看| 亚洲国产精品欧美日韩一区二区| 67194老司机精品午夜| 欧美成人在线网站| 国产福利1000| 久久国产成人精品国产成人亚洲| 视频一区视频二区制服丝袜| 欧美人与性禽xxxx| 国产日韩在线观看视频网站| 久久精品国产99精品国产2021| 青青草娱乐视频| 日韩人妻不卡一区二区三区| 国产午夜一区二区在线观看| 中文字幕成人在线观看| 精品久久久中文字幕| 在线观看免费视频一区| 亚洲区视频在线观看| 麻豆国产精品免费视频| 我要打飞华人永久免费| 免费又黄又硬又爽大片| 91国内揄拍国内精品对白| 最近中文字幕大全免费版在线| 国产人成视频在线视频| 一求乳魂h肉动漫在线观看|