备忘一下使用百度地图与百度导航中遇到的一些问题,已经解决方法,方便日后查询。
需知:
(1)、Android定位SDK中使用的坐标体系:
gcj02:表示定位成功后返回国测局经纬度坐标系坐标;
bd09:表示定位成功后返回百度墨卡托坐标系坐标;
bd09ll:表示定位成功后返回百度经纬度坐标系坐标。
其中bd09ll的坐标可以无偏差的显示在百度地图中(应该是百度地图默认也是使用这个坐标系),所以在定位中选取bd09ll,定位成功后就可以返回对应的坐标了。
(2)、Android导航SDK中使用的坐标体系:
BD09_MC:表示算路节点中使用百度墨卡托坐标;
GCJ02:表示算路节点中使用国测局坐标;
WGS84:表示算路节点中使用GPS坐标。
在2015年的时候,需要用到百度的导航功能,发现了百度定位与百度导航使用的是不同的坐标体系,所以导航的精准度惨不忍睹。但是当时又没有找到方法进行坐标转换,就搁置了这个功能。今天终于在BBS看到一个帖子百度开放平台-百度导航坐标转换问题。参考这个帖子,终于把问题解决了。
思路:
(1)在开始导航之前,将坐标转换成GCJ02坐标再进行导航。
(2)Android定位SDK类参考中的LocationClient类中有一个方法:
getBDLocationInCoorType(BDLocation src, java.lang.String transferType)
参数:
BDLocation -src 原始BDLocation;
String - transferType 转换类型,取值范围为:[
BDLocation.BDLOCATION_BD09_TO_GCJ02,
BDLocation.BDLOCATION_BD09LL_TO_GCJ02,
BDLocation.BDLOCATION_GCJ02_TO_BD09,
BDLocation.BDLOCATION_GCJ02_TO_BD09LL
]
好了,我们现在只需要把bd09ll坐标转成GCJ02即可。参考代码如下:
LocationClient.getBDLocationInCoorType(bdLocation, BDLocation.BDLOCATION_BD09LL_TO_GCJ02);
/*
bdLocation为定位时获取到的bd09ll坐标
*/
然后在初始化的时候就可以bdLocation.getLongitude()这样子获取GCJ02的坐标了。然后就可以愉快的导航了。