一句話搞定地圖導航功能

如果項目中用到了地圖導航功能的話,可以進入百度地圖和高德地圖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、把以上代碼做一個工具類,直接調用即可。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容