地球坐标 (WGS84)
- 国际标准,GPS标准从 GPS 设备中取出的原始数据是就是这个
- 国际地图提供商一般使用的也是这个
火星坐标 (GCJ-02)
- 中国标准,行货 GPS 设备取出的最终数据是这个
- 国家龟腚:
国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。
百度坐标 (BD-09) -(这个是百度地图独有的编码方式,它对原有的经纬度进行了二次加密)
- 百度标准,百度 SDK,地图,Geocoding 用的都是这个。
//火星坐标转百度坐标
CLLocationCoordinate2D test = CLLocationCoordinate2DMake([info.latitudeString floatValue], [info.longitudeStringfloatValue]);//将获取的经纬度转为CLLocationCoordinate2D类
坐标转换
NSDictionary* testdic = BMKConvertBaiduCoorFrom(test,BMK_COORDTYPE_COMMON);//调用百度提供的API BMKConvertBaiduCoorFrom()函数,转换坐标
CLLocationCoordinate2D lo = BMKCoorDictionaryDecode(testdic);//对转换后获得的经过base64加密之后的x,y坐标字典进行解密
CLLocation *cll = [[[CLLocation alloc]initWithLatitude:lo.latitude longitude:lo.longitude] locationMarsFromEarth];
locationMarsFromEarth方法是对CLLocation扩展的一个类由于不能上传文件,我把代码粘贴在下方
从 CLLocationManager 取出来的经纬度放到 mapView 上显示,是错误的!
从 CLLocationManager 取出来的经纬度去 Google Maps API 做逆地址解析,当然是错的!
从 MKMapView 取出来的经纬度去 Google Maps API 做逆地址解析终于对了。去百度地图API做逆地址解析,依旧是错的!
从上面两处取的经纬度放到百度地图上显示都是错的!错的!的!
分为 地球坐标,火星坐标(iOS mapView 高德 , 国内google ,搜搜、阿里云 都是火星坐标),百度坐标(百度地图数据主要都是四维图新提供的)
火星坐标: MKMapView
地球坐标: CLLocationManager
当用到CLLocationManager 得到的数据转化为火星坐标, MKMapView不用处理
API 坐标系
百度地图API 百度坐标
腾讯搜搜地图API 火星坐标
搜狐搜狗地图API 搜狗坐标
阿里云地图API 火星坐标
图吧MapBar地图API 图吧坐标
高德MapABC地图API 火星坐标
灵图51ditu地图API 火星坐标
*/
#import
@interface CLLocation (YCLocation)
//从地图坐标转化到火星坐标
- (CLLocation*)locationMarsFromEarth;
//从火星坐标转化到百度坐标
- (CLLocation*)locationBaiduFromMars;
//从百度坐标到火星坐标
- (CLLocation*)locationMarsFromBaidu;