美文网首页第三方扩展
Android跳转百度、高德地图导航

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

作者: 贱贱的贱小白 | 来源:发表于2017-07-19 11:55 被阅读1663次

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


    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跳转百度、高德地图导航

      本文链接:https://www.haomeiwen.com/subject/apclkxtx.html