原文:http://www.cnblogs.com/A--G/p/4835693.html
轉載請注明出處,謝謝~
最近項目遇到了谷歌和百度的經緯度的轉換問題(一家公司一套經啊),找找找,發現有接口:
方法一:
baidu經緯度坐標與google經緯度坐標都是經過轉換的。使用下面那個url可以將原始坐標或者谷歌的坐標轉換成baidu的坐標:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=116.308992&y=40.059225,然后將得到的base64字符還原,就是真實的經緯度。
請求接口中有四個參數:
其中,from和to對應的值分別是:0真實坐標;2google坐標;4baidu坐標。
from:被轉換的坐標體系
to:轉換到這個坐標體系
x:經度
y:緯度
接口應答中有三個key,
應答格式如:{"error":0,"x":"MTE2LjMyMTYyMzg4MjIz","y":"NDAuMDY2NDE2Mjc4NzMx"}
base64可以轉碼。
當然你也可以不用這么麻煩:可以用函數來計算:
方法二:
1 //轉換函數 2 3 /** 4 *坐標轉換函數,從原始GPS坐標,mapbar坐標轉換成百度坐標 5 *@param coorWgs84 待轉換的原始GPS坐標,或者mapbar的坐標 6 *@return 返回的NSDictionry中包含“x”,“y”字段,各自對應經過base64加密之后的x,y坐標 7 */ 8 UIKIT_EXTERN NSDictionary* BMKBaiduCoorForWgs84(CLLocationCoordinate2D coorWgs84); 9 10 /** 11 *坐標轉換函數,從google坐標,51地圖坐標,mapabc坐標轉換為百度坐標(51地圖坐標需要顯出10000) 12 *@param coorGcj 待轉換的google坐標,51地圖坐標,mapabc坐標 13 *@return 返回的NSDictionry中包含“x”,“y”字段,各自對應經過base64加密之后的x,y坐標 14 */ 15 UIKIT_EXTERN NSDictionary* BMKBaiduCoorForGcj(CLLocationCoordinate2D coorGcj); 16 17 /** 18 *base64加密后的坐標字典解密函數 19 *@param dictionary 帶解密的NSDictionry,該NSDictionry中應包含“x”,“y”字段,各自對應經過base64加密之后的x,y坐標 20 *@return 解密之后的坐標 21 */ 22 UIKIT_EXTERN CLLocationCoordinate2D BMKCoorDictionaryDecode(NSDictionary* dictionary); 23//調用函數
24 CLLocationCoordinate2D baiduCoordinate = BMKCoorDictionaryDecode(baidudict);
25 NSDictionary *baidudict = BMKBaiduCoorForGcj(谷歌坐標);//參數是谷歌的CLLocationCoordinate2D類型坐標
-----------------------------------2015-09-24更新-----------------------------------
發現坑爹的在接口里(BMKGeometry.h)找不到 BMKBaiduCoorForWgs84 和 BMKBaiduCoorForGcj 方法了,找找找,在百度地圖論壇里找到一篇文章:
原來現在最新的SDK用BMKConvertBaiduCoorFrom方法轉換了,而且這方法只能用於單向轉成百度的坐標系。
*@return 返回的NSDictionry中包含“x”,“y”字段,各自對應經過base64加密之后的x,y坐標
*/
UIKIT_EXTERN NSDictionary* BMKConvertBaiduCoorFrom(CLLocationCoordinate2D coordinate,BMK_COORD_TYPE type);
需要使用下邊的方法解密
/**
*base64加密后的坐標字典解密函數
*@param dictionary 帶解密的NSDictionry,該NSDictionry中應包含“x”,“y”字段,各自對應經過base64加密之后的x,y坐標
*@return 解密之后的坐標
*/
UIKIT_EXTERN CLLocationCoordinate2D BMKCoorDictionaryDecode(NSDictionary* dictionary);
舉例:
1 //轉化成標准的百度坐標 2 NSDictionary* else_coor_dic = BMKConvertBaiduCoorFrom(else_coor, BMK_COORDTYPE_COMMON); 3 4 CLLocationCoordinate2D baidu_coor = BMKCoorDictionaryDecode(else_coor_dic);
備注: 在BMK_COORD_TYPE里有2中類型,如果是GPS可以用BMK_COORDTYPE_GPS類型
1 typedef enum 2 { 3 BMK_COORDTYPE_GPS = 0, ///GPS設備采集的原始GPS坐標 4 BMK_COORDTYPE_COMMON, ///google地圖、soso地圖、aliyun地圖、mapabc地圖和amap地圖所用坐標 5 } BMK_COORD_TYPE; 6 7 8
參考鏈接 :1:http://blog.csdn.net/liyunxin0534/article/details/16338611
2: http://blog.sina.com.cn/s/blog_59fb90df01015y00.html
3.http://www.cnblogs.com/xuvw/archive/2013/03/05/2943661.html
4. http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=84935&highlight=%E8%BD%AC%E6%8D%A2