地图转换之高德、百度
2016-05-07 10:52
423 查看
最近碰到需要把服务器拿到的百度坐标系的经纬度转换成高德地图的坐标系,然后各自查询资料终于整理出来了,下面是综合一下网上的资料做的终结,有不对的地方望指正:
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; [code] 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;}[/code]
当然在写上述方法是别忘了引用头文件 #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 纠偏),可以使用二分法。
相关文章推荐
- View的事件分发和工作机制
- Android 用户定位
- AOJ 0118: Property Disribution(dfs)
- hihoCoder挑战赛20-题目2 : 展胜地的鲤鱼旗 -DP/分治
- Android三种XML解析
- hdu 4291 矩阵快速幂+找循环节
- DS-5 Development Studio
- HDU 3853 LOOPS (概率DP)
- 飛飛(三十三)深复制体验
- 百度地图API之JavaScript 开源库1
- static关键字的使用总结
- 关于在C#中对类中的隐藏基类方法和重写方法的理解
- 关键字搜索十次存memcache
- XMG 绘制形状
- 工欲善其事必先利其器
- java远程调用
- Android 6.0 中新的新技术
- UGUI富文本
- 你曾后悔进入 IT 行业吗?为什么?
- Git提交代码常用命令