iOS定位與坐標(biāo)系算法
在開始這個(gè)題目之前,先給大家再次掃掃盲,掃的不是坐標(biāo)系統(tǒng)的盲,而是我們國(guó)家 所使用的坐標(biāo)系統(tǒng)。好的,下面開始介紹iOS定位與坐標(biāo)算法。
大家都知道,美國(guó)GPS使用的是WGS84的坐標(biāo)系統(tǒng),以經(jīng)緯度的形式來(lái)表示地球平面上的某一個(gè)位置,這應(yīng)該是國(guó)際共識(shí)。但在我國(guó),出 于國(guó)家安全考慮,國(guó)內(nèi)所有導(dǎo)航電子地圖必須使用國(guó)家測(cè)繪局制定的加密坐標(biāo)系統(tǒng),即將一個(gè)真實(shí)的經(jīng)緯度坐標(biāo)加密成一個(gè)不正確的經(jīng)緯度坐標(biāo),我們?cè)跇I(yè)內(nèi)將前者 稱之為地球坐標(biāo),后者稱之為火星坐標(biāo),具體的說明可以參看百度百科中關(guān)于火星坐標(biāo)系統(tǒng)的解釋。
1.國(guó)內(nèi)各地圖API坐標(biāo)系統(tǒng)比較
參考http://rovertang.com/labs/map-compare/
結(jié)論是:
API | 坐標(biāo)系 |
百度地圖API | 百度坐標(biāo) |
騰訊搜搜地圖API | 火星坐標(biāo) |
搜狐搜狗地圖API | 搜狗坐標(biāo)* |
阿里云地圖API | 火星坐標(biāo) |
圖吧MapBar地圖API | 圖吧坐標(biāo) |
高德MapABC地圖API | 火星坐標(biāo) |
靈圖51ditu地圖API | 火星坐標(biāo) |
2.下面是百度官方對(duì)百度坐標(biāo)為何有偏移的解釋
國(guó)際經(jīng)緯度坐標(biāo)標(biāo)準(zhǔn)為WGS-84,國(guó)內(nèi)必須至少使用國(guó)測(cè)局制定的GCJ-02,對(duì)地理位置進(jìn)行首次加密。百度坐標(biāo)在此基礎(chǔ)上,進(jìn)行了BD-09二次加密措施,更加保護(hù)了個(gè)人隱私。百度對(duì)外接口的坐標(biāo)系并不是GPS采集的真實(shí)經(jīng)緯度,需要通過坐標(biāo)轉(zhuǎn)換接口進(jìn)行轉(zhuǎn)換。
3.火星坐標(biāo)系 (GCJ-02) 與百度坐標(biāo)系 (BD-09) 的轉(zhuǎn)換算法
GCJ-02(火星坐標(biāo)) 和 BD-09 (百度坐標(biāo))
算法代碼如下,其中 bd_encrypt 將 GCJ-02 坐標(biāo)轉(zhuǎn)換成 BD-09 坐標(biāo), bd_decrypt 反之。
- void bd_encrypt(double gg_lat, double gg_lon, double &bd_lat, double &bd_lon)
- {
- double x = gg_lon, y = gg_lat;
- double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);
- double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);
- bd_lon = z * cos(theta) + 0.0065;
- bd_lat = z * sin(theta) + 0.006;
- }
- 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);
- }
好,總結(jié)到這,希望讓大家對(duì)iOS定位與坐標(biāo)算法有更深的理解,也希望對(duì)大家有所幫助。