失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 百度地图坐标和高德地图坐标转换

百度地图坐标和高德地图坐标转换

时间:2019-10-24 19:25:40

相关推荐

百度地图坐标和高德地图坐标转换

网上解决该类问题的帖子很多,但是这里还需记录下自己解决问题的过程。

需求背景

项目中使用的都是百度坐标系BD-09,当APP跳转到高德地图APP时,虽然坐标经过了转换,但在高德地图上显示仍有偏移。因此问题:解决坐标偏移问题。

解决思路

从以下几方面入手:

1、原始坐标系弄错,比如以为自己是GPS坐标,但其实已经是GCJ-02坐标。

解决方案:请确保采集到的数据是哪个坐标体系,需要转换到哪个坐标系,再进行坐标转换。

2、原始坐标准确度不够

解决方案:如果您是GPS坐标,请确保采集GPS数据时,搜到至少4颗以上的卫星。并且GPS数据准不准,还取决于周围建筑物的高度,越高越不准,因为有遮挡。

如果本来就是GCJ-02坐标,在不同地图放大级别的时候,看到的地方可能不一样。比如你在地图级别4(国家)取到的坐标,放大到地图12级(街道)时,坐标就偏了。请确保在地图最大放大级别时,拾取坐标。

3、度分秒的概念混淆

比如,在google earth上采集到的是39°31’20.51,那么应该这样换算,31分就是31/60度,20.51秒就是20.51/3600度,结果就是39 + 31/60 + 20.51/3600 度。

4、经纬度顺序写反了

有些公司(比如高德,百度,腾讯)是先经度,再纬度,即Point(lng lat)。但谷歌坐标的顺序恰好相反,是(lat lng)。

方案实施

1.在程序中打印log得到百度坐标系、通过转换后的火星坐标系,校验转换后的结果是否正确,校验工具:百度坐标拾取器(http://api./lbsapi/getpoint/index.html)、高德坐标拾取器(/console/show/picker)。

此处就发现转换算法有问题,转换结果有偏差。算法应采用:/w605283073/article/details/64906518

2.从百度坐标系转换得到正确的火星坐标系,从自己的APP跳转到高德地图发现仍有偏移。那么问题一定出在APP跳转的过程。因此排查到跳转代码有问题,以下直接贴出正确跳转代码:

// viewMap-服务类型,// sourceApplication-第三方调用应用名称,// poiname-POI名称,// lat-经纬度参数,lon-经纬度参数,// dev-起终点是否偏移(0:lat和lon是已经加密后的,不需要国测加密;1:需要国测加密)Intent intent = new Intent("android.intent.action.VIEW", .Uri.parse("androidamap://navi?sourceApplication=我的应用&poiname=应用&lat="+ loc.getLat() + "&lon=" + loc.getLng()+ + "&dev=0"));intent.setPackage("com.autonavi.minimap");context.startActivity(intent);

注意:这里的dev参数,一般要写dev=0,即通过步骤1中的转换算法就已经是国测加密后的坐标,无需在进行国测加密了,否则得到的结果在地图上显示是一定有偏移的。这里参考的(/u010998327/article/details/71515147)

综上,经过上述步骤将坐标转换偏移问题修复。举一反三,其他坐标系的转换偏移问题解决思路应如上,如:火星坐标系转换到百度坐标系、WGS-84坐标系与百度互相转换等。

参考文献

/a/1190000000498434

/u010998327/article/details/71515147

/w605283073/article/details/64906518

如果觉得《百度地图坐标和高德地图坐标转换》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。