一句话搞定地图导航功能

2017-07-26  本文已影响0人  陈科比大宝贝儿

如果项目中用到了地图导航功能的话,可以进入百度地图和高德地图APP里面进行导航,简单方便。
先来看一下最终的效果图:


1.gif

借助于官方的百度导航和谷歌导航APP实现导航功能,我们要做的就是把起始地址和终止地址传过去就行了,如果用户的手机没有安装百度地图和高德地图的话就不能实现此功能,上代码;
1、使用导航功能时先判断一下手机是否安装百度地图或高德地图APP

public static boolean isInstalledBaidu() {
        return new File("/data/data/" + "com.baidu.BaiduMap").exists();
    }
    public static boolean isInstalledGaode() {
        return new File("/data/data/" + "com.autonavi.minimap").exists();
    }

2、打开高德地图APP和打开百度地图APP

public static void startBaidu(Context context, double latitude1,
            double longitude1, double latitude2, double longitude2) {
        if (BaiduMapUtil.isInstallByread()) {
            LatLng pt1 = new LatLng(latitude1, longitude1);
            LatLng pt2 = new LatLng(latitude2, longitude2);
            NaviParaOption para = new NaviParaOption();
            para.startPoint(pt1);
            para.startName("从这里开始");
            para.endPoint(pt2);
            para.endName("到这里结束");
            try {
                BaiduMapNavigation.openBaiduMapNavi(para, context);
            } catch (Exception e) {
                e.printStackTrace();
                BaiduMapUtil.installBaiduMap(context);// 提示安装百度地图客户端;
            }
        } else {
            Log.e("GasStation", "没有安装百度地图客户端");
            BaiduMapUtil.installBaiduMap(context);// 提示安装百度地图客户端;
        }

    }
public static void startGaode(Context context, double latitude,
            double longitude) {
        Intent intent = new Intent("android.intent.action.VIEW",
                android.net.Uri
                        .parse("androidamap://navi?sourceApplication=优易充&lat="
                                + latitude + "&lon=" + longitude + "&dev=0"));
        intent.setPackage("com.autonavi.minimap");
        context.startActivity(intent);
    }

3、百度地图和高德地图进行坐标转换

    public static LatLng baidu2Gaode(LatLng ll) {
        final double x_pi = Math.PI * 3000.0 / 180.0;
        double x = ll.longitude - 0.0065;
        double y = ll.latitude - 0.006;
        double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
        double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
        double lon = z * Math.cos(theta);
        double lat = z * Math.sin(theta);
        return new LatLng(lat, lon);
    }

4、使用的时候直接把起始位置的经纬度和终止位置的经纬度传过去即可。
5、把以上代码做一个工具类,直接调用即可。

上一篇下一篇

猜你喜欢

热点阅读