天天看點

Android 調用地圖導航

啟動高德地圖

/**
     * 啟動高德App進行導航
     *
     * @param sourceApplication 必填 第三方調用應用名稱。如 amap
     * @param dname             非必填 目的地名稱
     * @param dlat              必填 終點緯度
     * @param dlon              必填 終點經度
     * @param dev               必填 是否偏移(0:lat 和 lon 是已經加密後的,不需要國測加密; 1:需要國測加密)
     * @param style             必填 預設的導航方式 t = 0(駕車)= 1(公交)= 2(步行)= 3(騎行)= 4(火車)= 5(長途客車)
     */
    public static void goToNaviActivity(String sourceApplication, String poiname, double lat, double lon, String dev, String style) {
        //啟動路徑規劃頁面
        String uri = "amapuri://route/plan/?dlat="+ dlat+"&dlon="+dlon+"&dname="+ dname+"&dev=1&t=0";
        Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(uri));
        intent.setPackage("com.autonavi.minimap");
        context.startActivity(intent);
    }
           

注:上述是官方的方法,但是在部分手機上出現崩潰,方案:将uri開頭的“amapuri”改為“androidamap”即可!

啟動高德其他頁面 詳見官方文檔很詳細:

http://lbs.amap.com/api/amap-mobile/guide/android/navigation

啟動騰訊地圖

/**
     * 啟動騰訊地圖App進行導航
     * @param address 目的地
     * @param lat 必填 緯度
     * @param lon 必填 經度
     */
    public static void gotoTengxun(Context context, String address, double lat, double lon) {
        // 啟動路徑規劃頁面
        Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("qqmap://map/routeplan?type=drive&from=&fromcoord=&to="+ address + "&tocoord=" + lat + "," + lon + "&policy=0&referer=appName"));
        context.startActivity(naviIntent);
    }
           

啟動騰訊地圖其他頁面,詳見官方文檔:

http://lbs.qq.com/uri_v1/guide-route.html

啟動百度地圖

/**
     * 啟動百度App進行導航
     * @param address 目的地
     * @param lat 必填 緯度
     * @param lon 必填 經度
     */
    public static void goToBaiduActivity(Context context, String address, double lat, double lon) {
        double[] doubles = gcj02_To_Bd09(lat, lon);
        //啟動路徑規劃頁面
        Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("baidumap://map/direction?origin="+ doubles[] +","+ doubles[] +"&destination="+ address +"&mode=driving"));
        context.startActivity(naviIntent);
    }
           

啟動百度其他頁面詳見官方文檔:

http://lbsyun.baidu.com/index.php?title=uri/api/android

補充:

WGS84坐标系:即地球坐标系,國際上通用的坐标系。但是國家規定不能直接使用WGS84地理坐标系。

GCJ02坐标系:即火星坐标系,WGS84坐标系經加密後的坐标系。高德 騰訊采用的就是這個。

BD09坐标系:即百度坐标系,GCJ02坐标系經加密後的坐标系。

/**
     * 火星坐标系 (GCJ-02) 與百度坐标系 (BD-09) 的轉換算法 将 GCJ-02 坐标轉換成 BD-09 坐标
     *
     * @param lat
     * @param lon
     */
    public static double[] gcj02_To_Bd09(double lat, double lon) {
        double x = lon, y = lat;
        double z = Math.sqrt(x * x + y * y) +  * Math.sin(y * x_pi);
        double theta = Math.atan2(y, x) +  * Math.cos(x * x_pi);
        double tempLat = z * Math.sin(theta) + ;
        double tempLon = z * Math.cos(theta) + ;
        double[] gps = {tempLat, tempLon};
        return gps;
    }