【高德地圖API】從零開始學高德JS API(六)——座標轉換

酸奶小妹發表於2014-06-04

摘要:如何從GPS轉到谷歌?如何從百度轉到高德?這些都是小case。我們還提供,如何將基站cell_id轉換為GPS座標?

-----------------------------------------------------------------------------------------

第一部分 各種座標系詳解

1、大地座標系統 WGS-84

用來表述地球上點的位置的一種地區座標系統。它採用一個十分近似於地球自然形狀的參考橢球作為描述和推算地面點位置和相互關係的基準面。一個大地座標系統必須明確定義其三個座標軸的方向和其中心的位置。通常人們用旋轉橢球的短軸與某一規定的起始子午面分別平行乾地球某時刻的平均自轉軸和相應的真起始子午面來確定座標軸的方向。若使參考橢球中心與地球平均質心重合,則定義和建立了地心大地座標系。它是航天與遠端武器和空間科學中各種定位測控測軌的依據。若橢球表面與一個或幾個國家的區域性大地水準面吻合最好,則建立了一個國家或區域的區域性大地座標系。大地座標系中點的位置是以其大地座標表示的,大地座標均以橢球面的法線來定義。其中,過某點的橢球面法線與橢球赤道面的交角為大地緯度;包含該法線和大地子午面與起始大地子午面的二面角為該點的大地經度;沿法線至橢球面的距離為該點的大地高。大地緯度、大地經度和大地高分別用大寫英文字母B、L、H表示。

國內的網際網路公司,都不會使用GPS座標,因為這不符合國家政策。所以大家都會使用GCJ-02座標系。

 

2、火星座標系統 GCJ-02

國家保密外掛,也叫做加密外掛或者加偏或者SM模組,其實就是對真實座標系統進行人為的加偏處理,按照幾行程式碼的演算法,將真實的座標加密成虛假的座標,而這個加偏並不是線性的加偏,所以各地的偏移情況都會有所不同。而加密後的座標也常被人稱為火星座標系統。

目前使用火星座標系的地圖商:

  • 騰訊搜搜地圖
  • 搜狐搜狗地圖
  • 阿里雲地圖
  • 高德MapABC地圖
  • 靈圖51ditu地圖

所有的電子地圖所有的導航裝置,都需要加入國家保密外掛。第一步,地圖公司測繪地圖,測繪完成後,送 到國家測繪局,將真實座標的電子地圖,加密成“火星座標”,這樣的地圖才是可以出版和釋出的,然後才可以讓GPS公司處理。第二步,所有的GPS公司,只要需要汽車導航的,需要用到導航電子地圖的,統統需要在軟體中加入國家保密演算法,將COM口讀出來的真實的座標訊號,加密轉換成國家要求的保密的座標,這樣,GPS導航儀和導航電子地圖就可以完全匹配,GPS也就可以正常工作。

國內網際網路公司,都必須使用GCJ-02座標系。

 

 

3、百度座標系統 BD-09

百度座標對火星座標系進行了一次加密,形成了百度座標系.

目前使用百度座標系的地圖商:

  • 百度Baidu地圖

少部分公司會在GCJ-02的基礎上再進行一次加密,但這樣的座標不通用,只適於特定公司的地圖。

 

4、圖吧

圖吧是百度座標乘以10000的結果。

目前使用圖吧座標系的地圖商:

  • 圖吧MapBar地圖

少部分公司會在GCJ-02的基礎上再進行一次加密,但這樣的座標不通用,只適於特定公司的地圖。

 

5、移動聯通基站

移動基站採用小區制,覆蓋範圍幾KM;而聯通基站採用大區制,可以覆蓋幾十KM;輻射的頻率大小和能量決定覆蓋範圍。從另一角度來看,從能量守恆的角度來分析:手機輻射大的其基站輻射小(GSM),反之手機輻射小的其基站輻射大(CDMA) 。

聯通聯通基站格式 MNC MCC LAC CELLID

MNC(Mobile Network Code,行動網路號碼),用於識別移動客戶所屬的行動網路。

MCC(Mobile Country Code,移動國家號碼),用於唯一地標識移動客戶屬於的國家。它由三位十進位制陣列成(000-999),例如我國的MCC為460。

LAC(Location Area Code, 移動位置區碼),是為尋呼而設定的一個區域,覆蓋一片地理區域,初期一般按行政區域劃分(一個縣或一個區),現在很靈活了,按尋呼量劃分。當一個LAC下的尋呼量達到一個預警門限,就必須拆分。 為了確定移動臺的位置,每個GSMPLMN的覆蓋區都被劃分成許多位置區,位置區碼(LAC)則用於標識不同的位置區。 位置區碼(LAC)包含於LAI中,由兩個位元組組成,採用16進位制編碼。可用範圍為0x0000-0xFFFF,碼組0x0000和0xFFFE不可以使用(參見GSM規範03.03、04.08和11.11)。一個位置區可以包含一個或多個小區。

CELLID(Cell Tower ID,移動基站號),單元是指一個DVB-T訊號覆蓋的地理區域,這個訊號是由一個或者多個發射機使用單一頻率傳輸的,每個發射機可以發射特定的傳輸流。單元也可以包括中繼器所覆蓋的區域。兩個相鄰的單元之間可以有重疊的區域。在一個用原始網路識別符號(original_network_id)標識的網路裡面,標識一個單元的單元識別符號(cell_id)是唯一的。

 

6、電信基站格式

SID NID BID

SID和NID確定你現在使用的那裡的網路,看你是否漫遊,BID主要是確定你是用的哪個基站。

 

二、座標如何轉換

  • GPS轉谷歌地圖 http://ditujiupian.com/service/api.ashx?key=您的KEY& 功能手機
      type=wgs2gcj&lng=116.420817&lat=39.906987
  • GPS轉到高德地圖:同上
  • GPS轉百度地圖 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=wgs2bd&lng=116.420817&lat=39.906987
  • GPS轉圖吧地圖 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=wgs2mb&lng=116.420817&lat=39.906987
  • 谷歌地圖轉GPS http://ditujiupian.com/service/api.ashx?key=您的KEY&type=gcj2wgs&lng=116.420817&lat=39.906987
  • 谷歌地圖轉百度地圖 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=gcj2bd&lng=116.420817&lat=39.906987
  • 百度地圖轉GPS http://ditujiupian.com/service/api.ashx?key=您的KEY&type=bd2wgs&lng=116.420817&lat=39.906987
  • 百度地圖轉谷歌地圖 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=bd2gcj&lng=116.420817&lat=39.906987
  • 百度地圖轉高德地圖:同上
  • 圖吧地圖轉GPS http://ditujiupian.com/service/api.ashx?key=您的KEY&type=mb2wgs&lng=116.420817&lat=39.906987
  • 基站轉GPS http://ditujiupian.com/service/api.ashx?key=您的KEY&type=cellid2wgs&lac=4340&cellid=13178
  • 基站轉谷歌地圖 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=cellid2gcj&lac=4340&cellid=13178
  • 基站轉到高德地圖:同上
  • 基站轉百度地圖 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=cellid2bd&lac=4340&cellid=13178
  • 經緯度轉地址(大地:lnglat2address-wgs,火星:lnglat2address-gcj,百度:lnglat2address-bd) http://ditujiupian.com/service/api.ashx?key=您的KEY&type=lnglat2address-wgs&lng=116.420817&lat=39.906987

以上服務由座標糾偏網站提供,更多細節可以訪問網站,申請key。http://ditujiupian.com/

我申請了一個試用key:08145a5c5d2b487db7adeeac4a90f12a

 

三、百度座標轉到高德座標的演算法

1、線性轉換

var TO_GLNG = function(lng){return lng-0.0065;};
var TO_GLAT = function(lat){return lat-0.0060;};

 

2、球面座標轉換

#include <math.h>    
const double x_pi = 3.14159265358979324 * 3000.0 / 180.0;  
void bd_decrypt(double bd_lat, double bd_lon, double &gg_lat, double &gg_lon) { double x = bd_lon - 0.0065, y = bd_lat - 0.006; double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi); double theta = atan2(y, x) - 0.000003 * cos(x * x_pi); gg_lon = z * cos(theta); gg_lat = z * sin(theta); }

 

3、網路介面

http://ditujiupian.com/service/api.ashx?key=您的KEY&type=bd2gcj&lng=116.420817&lat=39.906987

 

----------------------------------------------------------

另外一篇關於座標轉換的文章,《為何您的座標不準?》

http://www.cnblogs.com/milkmap/p/3627940.html

相關文章