坐標偏移演算法
⑴ 如何解決坐標轉換,坐標偏移的問題
一、坐標體系
首先我們要明白,開發者能接觸到哪些坐標體系呢?
第一種分類:
1、 GPS,WGS-84,原始坐標體系。一般用國際標準的GPS記錄儀記錄下來的坐標,都是GPS的坐標。很可惜,在中國,任何一個地圖產品都不允許使用GPS坐標,據說是為了保密。GPS坐標形式如圖,度分秒形式的經緯度:
2、 GCJ-02,國測局02年發布的坐標體系。又稱「火星坐標」。在中國,必須至少使用GCJ-02的坐標體系。比如谷歌,騰訊,高德都在用這個坐標體系。GCJ-02也是國內最廣泛使用的坐標體系。
3、 其他坐標體系。一般都是由GCJ-02進過偏移演算法得到的。這種體系就根據每個公司的不同,坐標體系都不一樣了。比如,網路和搜狗就使用自己的坐標體系,與其他坐標體系不兼容。
第二種分類:
首先明白,所有坐標體系的原點,都是非洲。
1、 經緯度。這個是球面坐標,對於北京來說,就是(116.38817139.935961)這樣的坐標。比如騰訊、高德、網路都是這樣的經緯度坐標。谷歌是經緯度順序寫反的經緯度坐標。
如果是度分秒坐標,需要進行轉換,才能得到這樣的經緯度坐標。詳見坐標轉換。
2、 墨卡托坐標。平面坐標,相當於是直線距離,數字一般都比較大,像這樣的。(215362.00021333335 99526.00034912192)
墨卡托坐標,主要用於程序的後台計算。直線距離嘛,加加減減幾乎計算方便。
搜狗地圖API就是直接使用的墨卡托坐標。
二、坐標轉換
在各種web端平台,或者高德、騰訊、網路上取到的坐標,都不是GPS坐標,都是GCJ-02坐標,或者自己的偏移坐標系。
比如,你在谷歌地圖API,高德地圖API,騰訊地圖API上取到的,都是GCJ-02坐標,他們三家都是通用的,也適用於大部分地圖API產品,以及他們的地圖產品。
例外,網路API上取到的,是BD-09坐標,只適用於網路地圖相關產品。
例外,搜狗API上取到的,是搜狗坐標,只適用於搜狗地圖相關產品。
例外,谷歌地球,google earth上取到的,是GPS坐標,而且是度分秒形式的經緯度坐標。在國內不允許使用。必須轉換為GCJ-02坐標。
1、度分秒坐標轉換為經緯度
比如,在GPS記錄儀,或者google earth上採集到的是39°31'20.51,那麼應該這樣換算,31分就是31/60度,20.51秒就是20.51/3600度,結果就是39 + 31/60 + 20.51/3600 度。
2、 GPS轉換為GCJ-02坐標
谷歌,高德,騰訊的地圖API官網上,都不直接提供這樣的坐標轉換。如果要得到GCJ-02坐標,最好在他們的地圖上直接取點,或者通過地址解析得到。(這個工具我後續會貼出來的。我就愛干這樣的事情,哈哈。)
不過,在網上搜到了這樣的介面,該介面的type=1就是GPS轉到GCJ-02的墨卡托坐標。請大家對介面保密,哈哈。詳見:
3、GCJ-02與BD-09之間互轉
國測局GCJ-02坐標體系(谷歌、高德、騰訊),與網路坐標BD-09體系的轉換,在CSDN上有很詳細的講解:
不過也有更簡單的演算法,線性演算法(lat和lng是經緯度,球面坐標):
To_B是轉到網路,To_G是轉到GCJ-02。
var TO_BLNG = function(lng){return lng+0.0065;};
var TO_BLAT = function(lat){return lat+0.0060;};
var TO_GLNG = function(lng){return lng-0.0065;};
var TO_GLAT = function(lat){return lat-0.0060;};
4、經緯緯度轉成墨卡托
5、各家API公司坐標轉換介面的申請
一般需要將您的公司名稱、項目名稱、項目簡介、聯系人和聯系方式,發郵件至地圖API公司的商務部,經過申請,才能使用。
下面是他們的聯系方式: