实现效果:传入高德坐标数据正确调起百度地图导航
问题
最近项目中需要调用第三方导航(本地Android项目使用的是高德地图的SDK),由于高德地图使用的是火星坐标,百度地图使用的是百度坐标(火星坐标的基础上再次加密),这样就有了坐标转化的问题。
最开始使用了坐标转化的代码,但是位置有许多偏差(500米以内),后来无意翻看了百度URI的api 发现百度地图提供了 调用百度导航自动转化其他第三方(例如高德地图)经纬度的参数(coord_type 详见注释),这样就不用本地转换,从而解决偏差的问题
解决方法
/**
* @param destinationLat 目的地维度
* @param destinationLng 目的地经度
* @param coord_type 坐标类型 允许的值为bd09ll、bd09mc、gcj02、wgs84。
* bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托坐标,gcj02表示经过国测局加密的坐标,wgs84表示gps获取的坐标
* @param mode 导航类型导航模式
* 可选transit(公交)、 driving(驾车)、 walking(步行)和riding(骑行).
* @param src 必选参数,格式为:appName 不传此参数,不保证服务
*/
public void startBaiduNavi(Context context, String destinationLat, String destinationLng, String coord_type, String mode, String src) {
Intent i1 = new Intent();
i1.setData(Uri.parse("baidumap://map/direction?destination=" +
destinationLat + "," + destinationLng + "&coord_type=" + coord_type +
"&mode=" + mode + "&src=" + src + "#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end"));
context.startActivity(i1);
}
拓展
参考文档:百度地图 Android URI AIP
名称 | 别名 | 获取方式 | 应用场合 |
---|---|---|---|
wgs84 | 地球坐标 | 从 GPS 设备中获取的坐标数据 | 国际地图提供商,谷歌国际地图 |
gcj02 | 火星坐标,国测局坐标 | 从国行移动设备中定位获取的坐标数据 | 高德地图,谷歌地图,腾讯地图,阿里云地图 |
bd09 | 百度坐标 | 百度在火星坐标上二次加密后的坐标数据 | 百度地图 |