今天遇到個(gè)問題情龄,客戶給了個(gè) 矢量地圖浓镜,然后給了 左上角 & 右下角 的經(jīng)緯度休偶,讓我實(shí)時(shí)定位,并將自己的位置顯示在適量地圖上。
問題來(lái)了:
我把做好的給客戶測(cè)試蝗肪,客戶遠(yuǎn)在內(nèi)蒙古袜爪,我在帝都⊙ι粒客戶說(shuō)咋沒有自己的定位呢辛馆,小人在哪呢,看不見啊豁延。
尷尬了昙篙,在我這好好滴,去她那就不行了诱咏,郁悶苔可。
跟客戶溝通下,客戶的 矢量地圖 都是現(xiàn)畫的袋狞,AI畫圖焚辅,經(jīng)緯度都是用 北京54采集數(shù)據(jù),我也不懂苟鸯,反正就是測(cè)出來(lái)的跟 谷歌 的吻合同蜻。
那就可以解決了。
客戶用的是谷歌地圖的經(jīng)緯度早处,我用的是百度地圖的經(jīng)緯度湾蔓,只要轉(zhuǎn)化下就??了
先了解下
WGS84: 即地圖坐標(biāo),美國(guó)GPS使用的是WGS84的坐標(biāo)系統(tǒng)。GPS系統(tǒng)獲得的坐標(biāo)系統(tǒng)砌梆,基本為標(biāo)準(zhǔn)的國(guó)際通用的WGS84坐標(biāo)系統(tǒng).
GCJ-02: 即火星坐標(biāo),是由中國(guó)國(guó)家測(cè)繪局制訂的地理信息系統(tǒng)的坐標(biāo)系統(tǒng)默责。它是一種對(duì)經(jīng)緯度數(shù)據(jù)的加密算法,即加入隨機(jī)的偏差咸包。國(guó)內(nèi)出版的各種地圖系統(tǒng)(包括電子形式)傻丝,出于國(guó)家安全考慮,必須至少采用GCJ-02對(duì)地理位置進(jìn)行首次加密.
BD-09: 即百度坐標(biāo): 在GCJ02基礎(chǔ)上诉儒,進(jìn)行了BD-09二次加密措施葡缰,API支持從WGS/GCJ轉(zhuǎn)換成百度坐標(biāo),不支持反轉(zhuǎn).
/**
*坐標(biāo)轉(zhuǎn)換函數(shù),從原始GPS坐標(biāo)泛释,mapbar坐標(biāo),google坐標(biāo)滤愕,51地圖坐標(biāo),mapabc坐標(biāo)轉(zhuǎn)換為百度坐標(biāo)(51地圖坐標(biāo)需要顯出10000)
*@param coordinate 待轉(zhuǎn)換的坐標(biāo)
*@param type 待轉(zhuǎn)換的坐標(biāo)系類型怜校,GPS為原始GPS坐標(biāo)间影,COMMON為google坐標(biāo),51地圖坐標(biāo)茄茁,mapabc坐標(biāo)
*@return 返回的NSDictionry中包含“x”魂贬,“y”字段,各自對(duì)應(yīng)經(jīng)過(guò)base64加密之后的x裙顽,y坐標(biāo)
*/
UIKIT_EXTERN NSDictionary* BMKConvertBaiduCoorFrom(CLLocationCoordinate2D coordinate,BMK_COORD_TYPE type);
/**typedef enum
{
BMK_COORDTYPE_GPS = 0, ///GPS設(shè)備采集的原始GPS坐標(biāo)
BMK_COORDTYPE_COMMON,? ///google地圖付燥、soso地圖、aliyun地圖愈犹、mapabc地圖和amap地圖所用坐標(biāo)
} BMK_COORD_TYPE;
*base64加密后的坐標(biāo)字典解密函數(shù)
*@param dictionary 帶解密的NSDictionry键科,該NSDictionry中應(yīng)包含“x”,“y”字段漩怎,各自對(duì)應(yīng)經(jīng)過(guò)base64加密之后的x勋颖,y坐標(biāo)
*@return 解密之后的坐標(biāo)
*/
UIKIT_EXTERN CLLocationCoordinate2D BMKCoorDictionaryDecode(NSDictionary* dictionary);
用這兩個(gè)方法轉(zhuǎn)一下,就OK了勋锤,完美解決饭玲!
效果圖
下面這段在其他地方看到的叁执,應(yīng)該有所幫助
3.5.2? BD-09 轉(zhuǎn)換為 WGS84.GCJ-02(百度沒公開API,只能google了)
在Github 找到這個(gè)轉(zhuǎn)換算法https://github.com/TinyQ/TQLocationConverter
*? 將WGS-84轉(zhuǎn)為GCJ-02(火星坐標(biāo))+(CLLocationCoordinate2D)transformFromWGSToGCJ:(CLLocationCoordinate2D)wgsLoc;
*? 將GCJ-02(火星坐標(biāo))轉(zhuǎn)為百度坐標(biāo)+ (CLLocationCoordinate2D)transformFromGCJToBaidu:(CLLocationCoordinate2D)p;
*? 將百度坐標(biāo)轉(zhuǎn)為GCJ-02(火星坐標(biāo))+ (CLLocationCoordinate2D)transformFromBaiduToGCJ:(CLLocationCoordinate2D)p; *? 將GCJ-02(火星坐標(biāo))轉(zhuǎn)為WGS-84+ (CLLocationCoordinate2D)transformFromGCJToWGS:(CLLocationCoordinate2D)p;