Android 调用百度导航

我的博客

实现效果:传入高德坐标数据正确调起百度地图导航

问题

最近项目中需要调用第三方导航(本地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 百度坐标 百度在火星坐标上二次加密后的坐标数据 百度地图

你可能感兴趣的:(Android 调用百度导航)