<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>
  • 主站蜘蛛池模板: 欧美亚洲综合在线观看| 黑人巨茎大战欧美白妇| 毛片大全免费看| 天堂岛最新在线免费看电影| 公车上的奶水嗯嗯乱hnp| 人与禽交videosgratisdo视频| 中文字幕+乱码+中文乱码| 色yeye香蕉凹凸视频在线观看| 日韩av无码成人精品国产| 国产在线91精品天天更新| 久久天天躁狠狠躁夜夜躁2014| 91福利视频免费| 波多野结衣中文在线播放| 撕开老师的丝袜白丝扒开粉嫩的小 | 被女同桌调教成鞋袜奴脚奴| 日韩在线观看第一页| 国产午夜无码精品免费看动漫 | 国产欧美日韩精品丝袜高跟鞋| 亚洲一区二区三区免费| 99精品国产一区二区三区不卡| 波多野结衣在线观看3人| 成人欧美一区二区三区黑人3p| 后入内射国产一区二区| 一级免费黄色片| 玉蒲团2之玉女心经| 国色天香论坛社区在线视频| 医生好大好硬好爽好紧| 久久丫精品国产亚洲av| 韩国成人在线视频| 污污的软件下载| 国产精品成人无码久久久| 人妻在线日韩免费视频| 三上悠亚亚洲一区高清| 男朋友说我要冲你是什么意思| 在线观看免费视频a| 亚洲依依成人精品| 黄色一级视频网站| 无码精品人妻一区二区三区漫画| 国产免费AV片在线观看播放| 久久精品无码专区免费| 色狠狠一区二区三区香蕉蜜桃 |