Appearance
路线规划
基本介绍
根据出发地、目的地、途经地以及路径策略设置,可以根据用户设置的车牌信息,帮助用户规避限行区域,规划出最佳出行路线。 关键类:
- DMapNavi :此类是导航功能管理类,提供路线规划、行前选路、导航中控制导航视野,设置主辅路、桥上桥下等方法。
- DMapNaviListener:此类是导航事件信息与数据协议类,提供算路导航过程中的事件(如:路径规划成功/失败、TTS播报字符串、定位信号类型、路口放大图、车道线、到达目的地等)以及实时数据(如:诱导信-息NaviInfo等)回调接口。
- ParallelRoadListener:导航中监听主辅路、桥上桥下变化的回调接口。
初始化DMapNavi
导航和路线规划都需要先初始化DMapNavi实例,需要设置Context和DiMap两个参数,其中Context是必须要设置的,不能为空。DiMap在仅需要算路时,可以不传;如果要发起导航,在地图上显示导航路线,需要通过MapView.getMap接口获取到DiMap,然后再初始化DMapNavi。
xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.dmap.api.maps.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>java
MapView mapView = findViewById(R.id.mapview);
mapView.getMap(didiMap -> {
DMapNavi dMapNavi = new DMapNavi(Context, DiMap);
// 添加导航信息回调监听
dMapNavi.addDMapNaviListener(DMapNaviListener);
// 添加主辅路、桥上桥下信息回调监听
dMapNavi.addParallelRoadListener(ParallelRoadListener);
... ...
}1、设置车辆信息
车辆信息需要在算路之前设置,可以通过设置车牌号和设置CarInfo.setRestriction(true)设置规避限行(如果设置了CarInfo.setRestriction(true),将会替代dMapNavi.calculateDriveRoute设置的算路策略,默认为PathPlanningStrategy.DRIVING_AVOID_RESTRICT),计算出合理路线。其他算路策略参考PathPlanningStrategy
java
DMapCarInfo carInfo = new DMapCarInfo();
carInfo.setCarNumber("京XXXXXXX");
carInfo.setRestriction(true);
DMapNavi dMapNavi = new DMapNavi(context, null);
dMapNavi.setCarInfo(carInfo);
NaviPoi start = new NaviPoi("东软北京研发中心科研楼", new LatLng(40.04809245589786, 116.28114759922028), "");
NaviPoi end = new NaviPoi("北京西站", new LatLng(39.89591, 116.3213), "");
List<NaviPoi> waypoints = null;
dMapNavi.calculateDriveRoute(start, end, waypoints, PathPlanningStrategy.DRIVING_DEFAULT);2、算路
计算路线可以通过设置起终点(途经点)经纬度来发起算路。示例代码如下
java
DMapNavi dMapNavi = new DMapNavi(context, null);
NaviPoi start = new NaviPoi("东软北京研发中心科研楼", new LatLng(40.04809245589786, 116.28114759922028), "");
NaviPoi end = new NaviPoi("北京西站", new LatLng(39.89591, 116.3213), "");
List<NaviPoi> waypoints = new ArrayList();
wayponits.add(new NaviPoi("西二旗地铁站", new LatLng(40.053061, 116.306205), ""));
dMapNavi.calculateDriveRoute(start, end, waypoints, PathPlanningStrategy.DRIVING_DEFAULT);3、算路结果
当路径规划成功时,会触发DMapNaviListener.onCalculateRouteSuccess回调,DMapCalcRouteResult可以获取到路线信息,获取到路线之后,可以调用dMapNavi.startNavi()发起导航。
java
@Override
public void onCalculateRouteSuccess(DMapCalcRouteResult routeResult) {
Log.i(TAG, "onCalculateRouteSuccess:" + routeResult);
long[] routeIds = routeResult.getRouteId();
// 默认选中第一条路线,如果有多条路线,想设置设置第二条路线导航的话,startNavi之前设置路线id
if (routeIds != null && routeIds.length > 1) {
dMapNavi.selectRouteId(routeIds[1]);
}
dMapNavi.startNavi();
}如果路线规划失败,则会触发DMapNaviListener.onCalculateRouteFailure回调,可以在此回调中来执行相应处理逻辑。