天天看点

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;
    }