百度地图-百度谷歌经纬度转换 (2015年09最新版)

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

posted on 2015-09-24 16:20  MichaelMao  阅读(12242)  评论(1编辑  收藏  举报