百度地图SDK导航(路径规划+实时导航)

百度地图导航的官网:http://developer.baidu.com/map/index.php?title=android-navsdk

里面的demo写的非常详细 ,我主要说一下我个人遇到的问题以及对它的理解:
首先贴核心代码:
【路径规划】
百度地图SDK导航(路径规划+实时导航)_第1张图片

private void startCalcRoute(int netmode) {
        // 获取输入的起终点
        RoutePlanNode startNode = new RoutePlanNode(sX, sY,
                RoutePlanNode.FROM_MAP_POINT, eXString, eXString);
        // 终点
        RoutePlanNode endNode = new RoutePlanNode(eX, eY,
                RoutePlanNode.FROM_MAP_POINT, eYString, eYString);
        // 将起终点添加到nodeList
        ArrayList nodeList = new ArrayList(2);
        nodeList.add(startNode);
        nodeList.add(endNode);
        BNRoutePlaner.getInstance().setObserver(
                new RoutePlanObserver(this, null));
        // 设置算路方式
        BNRoutePlaner.getInstance().setCalcMode(
                NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME);
        // 设置算路结果回调
        BNRoutePlaner.getInstance()
                .setRouteResultObserver(mRouteResultObserver);
        // 设置起终点并算路
        boolean ret = BNRoutePlaner.getInstance().setPointsToCalcRoute(
                nodeList, NL_Net_Mode.NL_Net_Mode_OnLine);
        if (!ret) {
            Toast.makeText(this, "规划失败", Toast.LENGTH_SHORT).show();
        }
    }

这里sx,sy,ex,sy是起点跟终点的纬度经度,这里注意的是它们的取值都是整型,也就是说例如纬度为:28.242345 那要将它转化成2824234 把最后的那个5去掉。

【实时导航】
百度地图SDK导航(路径规划+实时导航)_第2张图片
百度实时导航给了一个很好的工具类,在官网demo里面的BNavigatorActivity.java

可以直接在别的类里面调用

    private void startNavi(boolean isReal) {
        if (mRoutePlanModel == null) {
            Toast.makeText(this, "请先算路!", Toast.LENGTH_LONG).show();
            return;
        }
        // 获取路线规划结果起点
        RoutePlanNode startNode = mRoutePlanModel.getStartNode();
        // 获取路线规划结果终点
        RoutePlanNode endNode = mRoutePlanModel.getEndNode();
        if (null == startNode || null == endNode) {
            return;
        }
        // 获取路线规划算路模式
        int calcMode = BNRoutePlaner.getInstance().getCalcMode();
        Bundle bundle = new Bundle();
        bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_VIEW_MODE,
                BNavigator.CONFIG_VIEW_MODE_INFLATE_MAP);
        bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_CALCROUTE_DONE,
                BNavigator.CONFIG_CLACROUTE_DONE);
        bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_START_X,
                startNode.getLongitudeE6());
        bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_START_Y,
                startNode.getLatitudeE6());
        bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_END_X, endNode.getLongitudeE6());
        bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_END_Y, endNode.getLatitudeE6());
        bundle.putString(BNavConfig.KEY_ROUTEGUIDE_START_NAME,
                mRoutePlanModel.getStartName(this, false));
        bundle.putString(BNavConfig.KEY_ROUTEGUIDE_END_NAME,
                mRoutePlanModel.getEndName(this, false));
        bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_CALCROUTE_MODE, calcMode);
        if (!isReal) {
            // 模拟导航
            bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_LOCATE_MODE,
                    RGLocationMode.NE_Locate_Mode_RouteDemoGPS);
        } else {
            // GPS 导航
            bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_LOCATE_MODE,
                    RGLocationMode.NE_Locate_Mode_GPS);
        }

        Intent intent = new Intent(RoutePlanActivity.this,
                BNavigatorActivity.class);
        intent.putExtras(bundle);
        startActivity(intent);
    }

这里遇到的问题就是 注意如果每次都要在resume时候再次路径规划的话 就直接把地图初始化放在resume里 这样就可以实现 开启的时候 接电话的时候 切换到其他的activity的时候 都可以再次进行路径规划(因为你的位置会变动)

你可能感兴趣的:(android)