Android跳转百度、高德地图导航

项目的需求是显示定位信息和商家地址信息
点击导航跳转到百度或者高德地图的导航功能、前提判断一下是否安装第三方应用


UI效果

首先先去找对应地图的API文档,
百度地图导航API
高德地图导航API
然后大致说下实现的功能吧、 先说主要的导航功能和url参数、

//百度
private void goToBaidu(){
    Intent intent = Intent.getIntent("intent://map/direction?destination=latlng:" + latLng + "|name:" + address + "&mode=driving&src=某某公司#Intent;" + "scheme=bdapp;package=com.baidu.BaiduMap;end");
    startActivity(intent);
}

URL接口:baidumap://map/direction
destination : 终点名称或经纬度
经纬度和名称:
latlng:39.9761,116.3282|name:中关村 (注意:坐标先纬度,后经度)
mode : 导航模式 //driving 驾车

不填起点默认当然定位位置

//高德
private void goToGaode(String lat, String lon) {
    bd_decrypt(Double.parseDouble(lat), Double.parseDouble(lon));
    StringBuffer stringBuffer = new StringBuffer("androidamap://route?sourceApplication=").append("amap");

    stringBuffer.append("&dlat=").append(gg_lat)
            .append("&dlon=").append(gg_lon)
            .append("&dname=").append(address)
            .append("&dev=").append(0)
            .append("&t=").append(0);

    Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));
    intent.setPackage("com.autonavi.minimap");
    startActivity(intent);
}

route:服务类型
sourceApplication:第三方调用应用名称
dlat:终点纬度
dlon:终点经度
dname:终点名称
dev:起终点是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)
t:t = 0(驾车)= 1(公交)= 2(步行)= 3(骑行)= 4(火车)= 5(长途客车)

这样就可以调起第三方地图了。
下面是一些小功能:

判断是否安装地图应用

//com.autonavi.minimap/com.baidu.BaiduMap
private boolean checkApkExist(Context context, String packageName) {
    if (packageName == null || "".equals(packageName))
        return false;
    try {
        ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName,
                PackageManager.GET_UNINSTALLED_PACKAGES);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}

百度和高德坐标系切换

//高德转百度
void bd_encrypt(double gg_lat, double gg_lon, double bd_lat, double bd_lon) {
    double x = gg_lon, y = gg_lat;
    double z = sqrt(x * x + y * y) + 0.00002 * sin(y * Math.PI);
    double theta = atan2(y, x) + 0.000003 * cos(x * Math.PI);
    bd_lon = z * cos(theta) + 0.0065;
    bd_lat = z * sin(theta) + 0.006;
}
//百度转高德
void bd_decrypt(double bd_lat, double bd_lon) {
    double x = bd_lon - 0.0065, y = bd_lat - 0.006;
    double z = sqrt(x * x + y * y) - 0.00002 * sin(y * Math.PI);
    double theta = atan2(y, x) - 0.000003 * cos(x * Math.PI);
    gg_lon = z * cos(theta);
    gg_lat = z * sin(theta);
}

点击定位按钮切换到当前位置

LatLng ll = new LatLng(mBaiduMap.getLocationData().latitude, mBaiduMap.getLocationData().longitude);
            MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
            mBaiduMap.animateMapStatus(update);

你可能感兴趣的:(Android跳转百度、高德地图导航)