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

資訊專欄INFORMATION COLUMN

百度,高德,Google地圖定位偏移以及坐標(biāo)系轉(zhuǎn)換

nidaye / 2689人閱讀

摘要:高德和在國(guó)內(nèi)都是使用坐標(biāo)系或在此基礎(chǔ)上面加密為直接的坐標(biāo)系,可以說(shuō),是國(guó)內(nèi)最廣泛使用的坐標(biāo)系百度坐標(biāo)系,百度坐標(biāo)系是在坐標(biāo)系的基礎(chǔ)上再次加密偏移后形成的坐標(biāo)系,只適用于百度地圖。

概述

一:在進(jìn)行地圖開發(fā)過程中,我們一般能接觸到以下三種類型的地圖坐標(biāo)系:

1.WGS-84原始坐標(biāo)系,一般用國(guó)際GPS紀(jì)錄儀記錄下來(lái)的經(jīng)緯度,通過GPS定位拿到的原始經(jīng)緯度,Google和高德地圖定位的的經(jīng)緯度(國(guó)外)都是基于WGS-84坐標(biāo)系的;但是在國(guó)內(nèi)是不允許直接用WGS84坐標(biāo)系標(biāo)注的,必須經(jīng)過加密后才能使用;

2.GCJ-02坐標(biāo)系,又名“火星坐標(biāo)系”,是我國(guó)國(guó)測(cè)局獨(dú)創(chuàng)的坐標(biāo)體系,由WGS-84加密而成,在國(guó)內(nèi),必須至少使用GCJ-02坐標(biāo)系,或者使用在GCJ-02加密后再進(jìn)行加密的坐標(biāo)系,如百度坐標(biāo)系。高德和Google在國(guó)內(nèi)都是使用GCJ-02坐標(biāo)系或在此基礎(chǔ)上面加密為直接的坐標(biāo)系,可以說(shuō),GCJ-02是國(guó)內(nèi)最廣泛使用的坐標(biāo)系;

3.百度坐標(biāo)系:bd-09,百度坐標(biāo)系是在GCJ-02坐標(biāo)系的基礎(chǔ)上再次加密偏移后形成的坐標(biāo)系,只適用于百度地圖。(目前百度API提供了從其它坐標(biāo)系轉(zhuǎn)換為百度坐標(biāo)系的API,但卻沒有從百度坐標(biāo)系轉(zhuǎn)為其他坐標(biāo)系的API)

二:為什么會(huì)發(fā)生偏移?

1.由于坐標(biāo)系之間不兼容,如在百度地圖上定位的經(jīng)緯度拿到高德地圖上直接描點(diǎn)就肯定會(huì)發(fā)生偏移;只考慮國(guó)內(nèi)的情況,高德地圖和Google地圖是可以不經(jīng)過轉(zhuǎn)換也能夠準(zhǔn)確顯示的(在國(guó)內(nèi)用的都是GCJ-02坐標(biāo)系);下面是收錄了網(wǎng)上的WGS-84,GCJ-02,百度坐標(biāo)系(bd-09)之間的相互轉(zhuǎn)換的方法,經(jīng)測(cè)試,是轉(zhuǎn)換后相對(duì)準(zhǔn)確可用的:

測(cè)試

工具類:

package com.topinfo.gps;

/**
 * 火星坐標(biāo)系 (GCJ-02) 與百度坐標(biāo)系 (BD-09) 的互轉(zhuǎn)
 * 
 */
public class GPSUtil {

    public static double pi   = 3.1415926535897932384626;
    public static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    public static double a    = 6378245.0;
    public static double ee   = 0.00669342162296594323;

    public static double transformLat(double x,double y){
        double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt (Math.abs (x));
        ret += (20.0 * Math.sin (6.0 * x * pi) + 20.0 * Math.sin (2.0 * x * pi)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin (y * pi) + 40.0 * Math.sin (y / 3.0 * pi)) * 2.0 / 3.0;
        ret += (160.0 * Math.sin (y / 12.0 * pi) + 320 * Math.sin (y * pi / 30.0)) * 2.0 / 3.0;
        return ret;
    }

    public static double transformLon(double x,double y){
        double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt (Math.abs (x));
        ret += (20.0 * Math.sin (6.0 * x * pi) + 20.0 * Math.sin (2.0 * x * pi)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin (x * pi) + 40.0 * Math.sin (x / 3.0 * pi)) * 2.0 / 3.0;
        ret += (150.0 * Math.sin (x / 12.0 * pi) + 300.0 * Math.sin (x / 30.0 * pi)) * 2.0 / 3.0;
        return ret;
    }

    public static double[] transform(double lat,double lon){
        if (outOfChina (lat, lon)) { return new double[] { lat, lon }; }
        double dLat = transformLat (lon - 105.0, lat - 35.0);
        double dLon = transformLon (lon - 105.0, lat - 35.0);
        double radLat = lat / 180.0 * pi;
        double magic = Math.sin (radLat);
        magic = 1 - ee * magic * magic;
        double sqrtMagic = Math.sqrt (magic);
        dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
        dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos (radLat) * pi);
        double mgLat = lat + dLat;
        double mgLon = lon + dLon;
        return new double[] { mgLat, mgLon };
    }

    public static boolean outOfChina(double lat,double lon){
        if (lon < 72.004 || lon > 137.8347) return true;
        if (lat < 0.8293 || lat > 55.8271) return true;
        return false;
    }

    /**
     * 84 to 火星坐標(biāo)系 (GCJ-02) World Geodetic System ==> Mars Geodetic System
     *
     * @param lat
     * @param lon
     * @return
     */
    public static double[] gps84_To_Gcj02(double lat,double lon){
        if (outOfChina (lat, lon)) { return new double[] { lat, lon }; }
        double dLat = transformLat (lon - 105.0, lat - 35.0);
        double dLon = transformLon (lon - 105.0, lat - 35.0);
        double radLat = lat / 180.0 * pi;
        double magic = Math.sin (radLat);
        magic = 1 - ee * magic * magic;
        double sqrtMagic = Math.sqrt (magic);
        dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
        dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos (radLat) * pi);
        double mgLat = lat + dLat;
        double mgLon = lon + dLon;
        return new double[] { mgLat, mgLon };
    }

    /**
     * * 火星坐標(biāo)系 (GCJ-02) to 84 * * @param lon * @param lat * @return
     * */
    public static double[] gcj02_To_Gps84(double lat,double lon){
        double[] gps = transform (lat, lon);
        double lontitude = lon * 2 - gps[1];
        double latitude = lat * 2 - gps[0];
        return new double[] { latitude, lontitude };
    }

    /**
     * 火星坐標(biāo)系 (GCJ-02) 與百度坐標(biāo)系 (BD-09) 的轉(zhuǎn)換算法 將 GCJ-02 坐標(biāo)轉(zhuǎn)換成 BD-09 坐標(biāo)
     *
     * @param lat
     * @param lon
     */
    public static double[] gcj02_To_Bd09(double lat,double lon){
        double x = lon, y = lat;
        double z = Math.sqrt (x * x + y * y) + 0.00002 * Math.sin (y * x_pi);
        double theta = Math.atan2 (y, x) + 0.000003 * Math.cos (x * x_pi);
        double tempLon = z * Math.cos (theta) + 0.0065;
        double tempLat = z * Math.sin (theta) + 0.006;
        double[] gps = { tempLat, tempLon };
        return gps;
    }

    /**
     * * 火星坐標(biāo)系 (GCJ-02) 與百度坐標(biāo)系 (BD-09) 的轉(zhuǎn)換算法 * * 將 BD-09 坐標(biāo)轉(zhuǎn)換成GCJ-02 坐標(biāo) * * @param
     * bd_lat * @param bd_lon * @return
     */
    public static double[] bd09_To_Gcj02(double lat,double lon){
        double x = lon - 0.0065, y = lat - 0.006;
        double z = Math.sqrt (x * x + y * y) - 0.00002 * Math.sin (y * x_pi);
        double theta = Math.atan2 (y, x) - 0.000003 * Math.cos (x * x_pi);
        double tempLon = z * Math.cos (theta);
        double tempLat = z * Math.sin (theta);
        double[] gps = { tempLat, tempLon };
        return gps;
    }

    /**將gps84轉(zhuǎn)為bd09
     * @param lat
     * @param lon
     * @return
     */
    public static double[] gps84_To_bd09(double lat,double lon){
        double[] gcj02 = gps84_To_Gcj02 (lat, lon);
        double[] bd09 = gcj02_To_Bd09 (gcj02[0], gcj02[1]);
        return bd09;
    }

    public static double[] bd09_To_gps84(double lat,double lon){
        double[] gcj02 = bd09_To_Gcj02 (lat, lon);
        double[] gps84 = gcj02_To_Gps84 (gcj02[0], gcj02[1]);
        // 保留小數(shù)點(diǎn)后六位
        gps84[0] = retain6 (gps84[0]);
        gps84[1] = retain6 (gps84[1]);
        return gps84;
    }

    /**保留小數(shù)點(diǎn)后六位
     * @param num
     * @return
     */
    private static double retain6(double num){
        String result = String.format ("%.6f", num);
        return Double.valueOf (result);
    }

}

測(cè)試類:

package com.topinfo.gps;

public class Test2 {

    /**
    
    //GPS坐標(biāo)
    116.32715863448607
    39.990912172420714
    
    //百度
    116.33993794567915
    39.99790821949972
     
    */
    
    public static void main(String[] args){
        
        double[] gps =  GPSUtil.gps84_To_bd09 (39.990912172420714, 116.32715863448607);
        
        System.out.println (gps[0]);
        System.out.println (gps[1]);
         
       
        
    }
    
}

輸出:
39.997903976430734
116.33993249456921

經(jīng)過比對(duì):
39.997903976430734
39.99790821949972

116.33993249456921
116.33993794567915

然后在百度官網(wǎng)API測(cè)試;也幾乎是重疊的,如果:

工具類我是在 https://blog.csdn.net/a135703... 找到的。

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

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

相關(guān)文章

  • 前端小知識(shí)--地圖坐標(biāo)轉(zhuǎn)換

    摘要:實(shí)際中我們可能會(huì)用到不同的地圖,那么就對(duì)應(yīng)到不同坐標(biāo)系的轉(zhuǎn)換,比如說(shuō),你有一份的數(shù)據(jù)服務(wù),你要展現(xiàn)在百度或者高德地圖上,這時(shí)候你就需要轉(zhuǎn)換了。 地圖坐標(biāo)轉(zhuǎn)換 LBS,基于位置的服務(wù)(Location Based Service),近年來(lái)已經(jīng)無(wú)處不在,尤其是我們前端,相信或多或少都有接觸一些地圖API服務(wù),比如高德、百度啊、谷歌啊~但是用的時(shí)候可能看到下面這些字眼:比如BD09、火星坐標(biāo)...

    liangdas 評(píng)論0 收藏0
  • gcoord: 轉(zhuǎn)換WGS84、GCJ02、BD09坐標(biāo),解決百度地圖高德地圖標(biāo)系不統(tǒng)一的問題

    摘要:做過地圖相關(guān)開發(fā)的同學(xué)肯定會(huì)遇到這樣一個(gè)問題同樣的經(jīng)緯度坐標(biāo),在百度地圖和高德地圖上位置不一樣。解決方案百度地圖以及高德地圖都提供了一些方法來(lái)轉(zhuǎn)換不同坐標(biāo)系下的坐標(biāo),但是它們都需要進(jìn)行網(wǎng)絡(luò)請(qǐng)求,性能很差。 做過地圖相關(guān)開發(fā)的同學(xué)肯定會(huì)遇到這樣一個(gè)問題:同樣的經(jīng)緯度坐標(biāo),在百度地圖和高德地圖上位置不一樣。showImg(https://segmentfault.com/img/remot...

    yimo 評(píng)論0 收藏0
  • 如何用Python完成百度高德地圖轉(zhuǎn)換

      眾所周知,Python的一個(gè)使用場(chǎng)景還是比較多的,在工作當(dāng)中,也會(huì)涉及到多方面的一些事情。那么,今天小編寫這篇文章的一個(gè)主要目的,給大家來(lái)介紹關(guān)于如何用Python完成百度與搞得地圖轉(zhuǎn)換,下面就給大家詳細(xì)介紹下。  一、地理編碼與逆編碼  地理編碼與逆編碼表示的是地名地址與地理坐標(biāo)(經(jīng)緯度)互相轉(zhuǎn)換的過程。其中,將地址信息映射為地理坐標(biāo)的過程稱之為地理編碼;將地理坐標(biāo)轉(zhuǎn)換為地址信息的過程稱之為...

    89542767 評(píng)論0 收藏0
  • GPS坐標(biāo)互轉(zhuǎn):WGS-84(GPS)、GCJ-02(Google地圖)、BD-09(百度地圖)

    摘要:轉(zhuǎn)換的結(jié)果和百度提供的接口精確到小數(shù)點(diǎn)后位請(qǐng)放心使用衛(wèi)星橢球坐標(biāo)投影到平面地圖坐標(biāo)系的投影因子。 WGS-84:是國(guó)際標(biāo)準(zhǔn),GPS坐標(biāo)(Google Earth使用、或者GPS模塊) GCJ-02:中國(guó)坐標(biāo)偏移標(biāo)準(zhǔn),Google Map、高德、騰訊使用 BD-09:百度坐標(biāo)偏移標(biāo)準(zhǔn),Baidu Map使用 WGS-84 to GCJ-02 GPS.gcj_encrypt(); GC...

    Baaaan 評(píng)論0 收藏0
  • GPS坐標(biāo)互轉(zhuǎn):WGS-84(GPS)、GCJ-02(Google地圖)、BD-09(百度地圖)

    摘要:轉(zhuǎn)換的結(jié)果和百度提供的接口精確到小數(shù)點(diǎn)后位請(qǐng)放心使用衛(wèi)星橢球坐標(biāo)投影到平面地圖坐標(biāo)系的投影因子。 WGS-84:是國(guó)際標(biāo)準(zhǔn),GPS坐標(biāo)(Google Earth使用、或者GPS模塊) GCJ-02:中國(guó)坐標(biāo)偏移標(biāo)準(zhǔn),Google Map、高德、騰訊使用 BD-09:百度坐標(biāo)偏移標(biāo)準(zhǔn),Baidu Map使用 WGS-84 to GCJ-02 GPS.gcj_encrypt(); GC...

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

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

0條評(píng)論

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