地图转换之高德、百度

最近碰到需要把服务器拿到的百度坐标系的经纬度转换成高德地图的坐标系,然后各自查询资料终于整理出来了,下面是综合一下网上的资料做的终结,有不对的地方望指正:

1.国内各地图API坐标系统比较

参考http://rovertang.com/labs/map-compare/

结论是:

API

坐标系

百度地图API

百度坐标

腾讯搜搜地图API

火星坐标

搜狐搜狗地图API

搜狗坐标*

阿里云地图API

火星坐标

图吧MapBar地图API

图吧坐标

高德MapABC地图API

火星坐标

灵图51ditu地图API

火星坐标

2.百度坐标与火星坐标的互换
接下来以百度与高德的转换为例

const double x_pi = 3.14159265358979324 * 3000.0 / 180.0;

//百度坐标转火星坐标

+(CLLocationCoordinate2D)bd_decrypt:(double)bd_lat andLon:(double)bd_lon

{

    double x = bd_lon - 0.0065, y = bd_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);

    double gg_lon = z * cos(theta);

    double gg_lat = z * sin(theta);

    CLLocationCoordinate2D coordinate =  CLLocationCoordinate2DMake(gg_lat, gg_lon);

    return coordinate;

}

//火星坐标百度坐标

+(CLLocationCoordinate2D)bd_encrypt:(double)gg_lat andLon:(double)gg_lon

{

    double x = gg_lon, y = gg_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);  
    double     bd_lon = z * cos(theta) + 0.0065;  
    double     bd_lat = z * sin(theta) + 0.006;
	CLLocationCoordinate2D coordinate =  CLLocationCoordinate2DMake(gg_lat, gg_lon);

    return coordinate;

}

当然在写上述方法是别忘了引用头文件 #import <MapKit/MapKit.h>

下面的两个的转换没试验过,但是也贴出来让大家参考参考。

3.地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换算法

WGS-84  GCJ-02 的转换(即 GPS 加偏)算法是一个普通青年轻易无法接触到的公开秘密。这个算法的代码在互联网上是公开的,详情请使用 Google 搜索 "wgtochina_lb" 

整理后的算法代码请参考 https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936 。知道了这个算法之后,就可以离线进行 Google 地图偏移校正,不必像之前那么麻烦。

至于 GCJ-02  WGS-84 的转换(即 GPS 纠偏),可以使用二分法。

 
 
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值