首先介绍一些有关坐标系的知识:
1.国际经纬度坐标标准为WGS-84(同时也是iOS自带定位系统使用的坐标系)
2.国内使用的则是以WGS-84为基准,进行首次加密的坐标系为GCJ-02(高德使用的坐标系是GCJ-02)
3.百度坐标在GCJ-02的基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。
百度坐标拾取器:http://api.map.baidu.com/lbsapi/getpoint/index.html
高德坐标拾取器:http://www.gis520.com/gis/tools/LngLatPicker/
其他坐标系转百度的第一种方法:
使用下面那个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可以转码
其他坐标系转百度的第二种方法:
使用百度api中的BMKConvertBaiduCoorFrom方法
/**
*坐标转换函数,从原始GPS坐标,mapbar坐标,google坐标,51地图坐标,mapabc坐标转换为百度坐标(51地图坐标需要显出10000)
*@param coordinate待转换的坐标
*@param type待转换的坐标系类型,GPS为原始GPS坐标,COMMON为google坐标,51地图坐标,mapabc坐标
*@return 返回的NSDictionry中包含“x”,“y”字段,各自对应经过base64加密之后的x,y坐标
*/
UIKIT_EXTERNNSDictionary* BMKConvertBaiduCoorFrom(CLLocationCoordinate2D coordinate,BMK_COORD_TYPE type);
得到的结果可以使用以下方法解密
/**
*base64加密后的坐标字典解密函数
*@param dictionary 带解密的NSDictionry,该NSDictionry中应包含“x”,“y”字段,各自对应经过base64加密之后的x,y坐标
*@return 解密之后的坐标
*/
UIKIT_EXTERN CLLocationCoordinate2D BMKCoorDictionaryDecode(NSDictionary* dictionary);
第三种方法:各种坐标系之间的转换,个人觉得还可以,推荐一下第三方的