原文: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