骑行/步行路线规划 最后更新时间: 2024年03月20日
基本介绍
导航sdk同时提供了骑行与步行场景下的路线规划与导航功能。针对骑行与步行的特点,进行场景化算法优化,规划出更为合理、便捷的路线,提供更为清晰的语音播报与导航信息反馈。
要实现骑行、步行路径规划功能,以下两个类您需要了解:
- AMapNavi :此类是导航功能管理类,提供路线规划、行前选路、导航中重算等方法。它是一个单例,通过getInstance方法获取该单例,通过destroy方法来销毁该单例。
- AMapNaviListener:此类是导航事件信息与数据协议类,提供算路导航过程中的事件(如:路径规划成功/失败、TTS字符串、GPS信号弱、到达目的地等)以及实时数据(如:诱导信息NaviInfo、定位信息、电子眼信息等)回调接口。
说明
- 注意:路径规划功能需要联网使用。
- 起终点信息可通过多种方式获取,如:使用坐标拾取器查询您需要的点的坐标;还可以通过搜索 SDK 中的 POI 搜索查询兴趣点,作为起终点。
- 骑步行算路同样支持单路径规划与多路径规划,可以通过骑步行的POI算路接口来指定 TravelStrategy 枚举。
1. 经纬度算路
传入起、终点的经纬度信息来规划路线。
骑行算路示例代码:
// 起点信息
NaviLatLng start = new NaviLatLng(39.993308, 116.473199);
// 终点信息
NaviLatLng end = new NaviLatLng(39.917834, 116.397036);
// 经纬度算路
AMapNavi.getInstance(this).calculateRideRoute(start, end);
步行算路示例代码:
// 起点信息
NaviLatLng start = new NaviLatLng(39.993308, 116.473199);
// 终点信息
NaviLatLng end = new NaviLatLng(39.917834, 116.397036);
// 经纬度算路
AMapNavi.getInstance(this).calculateWalkRoute(start, end);
2. POI算路
传入起、终点的POI信息来规划骑、步行路线。
2.1 单路径规划
示例代码:
// 构造起点POI
NaviPoi start = new NaviPoi("故宫博物馆", null, "B000A8UIN8");
// 构造终点POI
NaviPoi end = new NaviPoi("北京大学", null, "B000A816R6");
// 进行骑行算路
AMapNavi.getInstance(this).calculateRideRoute(start, end, TravelStrategy.SINGLE);
2.2 多路径规划
示例代码:
// 构造起点POI
NaviPoi start = new NaviPoi("故宫博物馆", null, "B000A8UIN8");
// 构造终点POI
NaviPoi end = new NaviPoi("北京大学", null, "B000A816R6");
// 进行步行算路
AMapNavi.getInstance(this).calculateWalkRoute(start, end, TravelStrategy.MULTIPLE);
3. 处理结果
当路线规划成功后,会触发 AMapNaviListener 的 onCalculateRouteSuccess 回调,在该回调函数中,你可以获取路线对象,进行规划路线的显示:
@Override
public void onCalculateRouteSuccess(AMapCalcRouteResult routeResult) {
// 获取路线数据对象
HashMap<Integer, AMapNaviPath> naviPaths = AMapNavi.getInstance(this).getNaviPaths();
// 绘制显示路径
...
}
也可以直接开启骑、步行导航:
@Override
public void onCalculateRouteSuccess(AMapCalcRouteResult routeResult) {
// 开启导航
AMapNavi.getInstance(this).startNavi(NaviType.GPS);
}
如果路线规划失败,则会触发 AMapNaviListener 的 onCalculateRouteFailure 回调,可以在此回调中来执行相应处理逻辑。
骑步行导航适配问题
驾车升级自定义view看齐了组件,骑步行仍是历史实现,需要使用该接口进行历史兼容状态判断,驾车场景入参为false,骑步行场景入参为true。
AMapNavi.getInstance(this.getApplicationContext()).setIsNaviTravelView(true);