ios开发百度高德地图经纬度相互转换的算法解析
2017-08-22 11:13
609 查看
首先科普一下,经纬度这东西.GPS公司的经纬度算是 地球坐标系,高德地图的,是经过国家加密过得经纬度, 称之为火星坐标. 高德地图是火星坐标的二次加密.
完事儿上代码.
// 百度转高德
-(void)bdToGaodeWithLat:(double)lat andLon:(double)lon
{
double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
double x = lon;
double y = lat;
double z = sqrt(x*x + y*y) + 0.00002*sin(y*x_pi);
double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);
NSLog(@"bd_lon:%f",z * cos(theta) + 0.0065);
NSLog(@"bd_lat:%f",z * sin(theta) + 0.006);
//[self gaodeToBdWithLat:(z * sin(theta) + 0.006) andLon:(z * cos(theta) + 0.0065)];
}
//高德转百度
-(void)gaodeToBdWithLat:(double)lat andLon:(double)lon
{
double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
double x = lon - 0.0065, y = lat - 0.006;
double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
NSLog(@"gg_lon:%f",z * cos(theta));
NSLog(@"gg_lat:%f",z * sin(theta));
}
百度关于坐标系的解析:
国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。
以下来自百科
火星坐标系统:
是一种国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照特殊的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常被人称为火星坐标系统。
所有的电子地图、导航设备,都需要加入国家保密插件。第一步,地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标的电子地图,加密成“火星坐标”,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。第二步,所有的GPS公司,只要需要汽车导航的,需要用到导航电子地图的,都需要在软件中加入国家保密算法,将COM口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标。这样,GPS导航仪和导航电子地图就可以完全匹配,GPS也就可以正常工作了。
以上基本够用,如果不够参考以下链接: http://blog.csdn.net/meegomeego/article/details/39927017
完事儿上代码.
// 百度转高德
-(void)bdToGaodeWithLat:(double)lat andLon:(double)lon
{
double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
double x = lon;
double y = lat;
double z = sqrt(x*x + y*y) + 0.00002*sin(y*x_pi);
double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);
NSLog(@"bd_lon:%f",z * cos(theta) + 0.0065);
NSLog(@"bd_lat:%f",z * sin(theta) + 0.006);
//[self gaodeToBdWithLat:(z * sin(theta) + 0.006) andLon:(z * cos(theta) + 0.0065)];
}
//高德转百度
-(void)gaodeToBdWithLat:(double)lat andLon:(double)lon
{
double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
double x = lon - 0.0065, y = lat - 0.006;
double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
NSLog(@"gg_lon:%f",z * cos(theta));
NSLog(@"gg_lat:%f",z * sin(theta));
}
百度关于坐标系的解析:
国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。
以下来自百科
火星坐标系统:
是一种国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照特殊的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常被人称为火星坐标系统。
所有的电子地图、导航设备,都需要加入国家保密插件。第一步,地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标的电子地图,加密成“火星坐标”,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。第二步,所有的GPS公司,只要需要汽车导航的,需要用到导航电子地图的,都需要在软件中加入国家保密算法,将COM口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标。这样,GPS导航仪和导航电子地图就可以完全匹配,GPS也就可以正常工作了。
以上基本够用,如果不够参考以下链接: http://blog.csdn.net/meegomeego/article/details/39927017
相关文章推荐
- ios开发百度高德地图经纬度相互转换的算法解析
- IOS开发保存图片到Documents目录及PNG,JPEG格式相互转换
- IOS开发NSString与int和float的相互转换以及字符串拼接、NSString、NSData、char* 类型之间的转换
- iOS开发中的火星坐标系及各种坐标系转换算法
- IOS开发NSString与int和float的相互转换以及字符串拼接、NSString、NSData、char* 类型之间的转换
- iOS基于百度地图的开发(6)——google坐标转换成百度坐标
- 百度天气api开发 全解析xml和json格式 使用json-lib jsonObject、 Gson 方式把json 转换成 java对象
- 墨卡托坐标于百度经纬度坐标相互转换c#实现
- IOS将GPS定位经纬度转换为高德地图经纬度
- IOS开发NSString与int和float的相互转换以及字符串拼接、NSString、NSData、char* 类型之间的转换
- ios开发答疑录系列---(六)NSString和NSData通过Base64编码的相互转换
- 【转】火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版
- iOS开发>>>NSData 与 NSString,Byte数组,UIImage 的相互转换
- iOS 高德地图 根据经纬度解析成位置
- NSdata 与 NSString,Byte数组,UIImage 的相互转换---ios开发 Objective-C
- NSdata 与 NSString,Byte数组,UIImage 的相互转换---ios开发 Objective-C
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版 (网络搜集)
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版
- NSdata 与 NSString,Byte数组,UIImage 的相互转换---ios开发 Objective-C