驾车/货车路线规划 最后更新时间: 2026年05月29日
基本介绍
根据出发地、目的地、途经地以及路径策略设置,为用户量身设计出行方案。同时可结合实时交通,帮助用户绕开拥堵路段,提供更贴心、更人性化的驾车出行体验。要实现驾车、货车路径规划功能,以下两个类您需要了解:
- AMapNavi :此类是导航功能管理类,提供路线规划、行前选路、导航中重算等方法。它是一个单例,通过getInstance方法获取该单例,通过destroy方法来销毁该单例。
- AMapNaviListener:此类是导航事件信息与数据协议类,提供算路导航过程中的事件(如:路径规划成功/失败、TTS字符串、GPS信号弱、到达目的地等)以及实时数据(如:诱导信息NaviInfo、定位信息、电子眼信息等)回调接口。
说明
- 路径规划功能需要联网使用
- 起终点信息可通过多种方式获取,如:使用坐标拾取器查询您需要的点的坐标;还可以通过搜索 SDK 中的 POI 搜索查询兴趣点,作为起终点。
- 最多支持设置 16 个途经点,注意:导航组件最多支持设置3个途径点。
- 路径的计算策略包含单一策略和多策略,通过多策略,可计算出多条规划路径,需要通过 AMapNavi 的 getNaviPaths 方法获取这些路径。
1、算路策略
导航SDK提供21种驾车策略,分成两种类型:返回单一路径的策略和返回多条路径的策略,对应 PathPlanningStrategy 枚举。
您可以使用以上表格中的策略值进行直接算路,若您想实现和高德地图一样的 checkbox 选项,那么建议您直接使用我们封装的AMapNavi中的strategyConvert 方法来获取策略值。
2、经纬度算路
传入起、终点的经纬度信息,来进行路线规划。
示例代码:
const appKey = "您的appKey";
const naviInstance: IAMapNavi = AMapNaviFactory.getAMapNaviInstance(getContext().getApplicationContext(), appKey);
// 起点信息
const startList = new ArrayList<NaviLatLng>();
startList.add(new NaviLatLng(39.993308,116.473199));
// 终点信息
const endList = new ArrayList<NaviLatLng>();
endList.add(new NaviLatLng(39.917834, 116.397036));
// 经纬度算路
naviInstance.calculateDriveRoute(startList, endList, null, PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT);
3、POI算路
传入起、终点的经纬度信息,来进行路线规划。
示例代码:
const appKey = "您的appKey";
const naviInstance: IAMapNavi = AMapNaviFactory.getAMapNaviInstance(getContext().getApplicationContext(), appKey);
// 起点信息
let start: NaviPoi | string | null = null;
// 终点信息
let end: NaviPoi | string | null = null;
//注:以下三种类型任选一种即可
//1, 第一种类型: NaviPoi类型(POI ID)
start = new NaviPoi("龙城花园", null, "B000A8UF3J");
end = new NaviPoi("北京大学", null, "B000A816R6");
// //2, 第二种类型:NaviPoi类型(经纬度)
// start = new NaviPoi(null, new NaviLatLng(40.100204,116.376890), null);
// end = new NaviPoi(null, new NaviLatLng(39.941597,116.352869), null);
// //3, 第三种类型:string类型(POI ID)
// start = "B000A8UF3J";
// end = "B000A816R6"
naviInstance.calculateDriveRouteForPoi(start, end, null, PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT);说明:POI算路中,NaviPoi对象内也可以传入经纬度信息,优先使用POIID,如果POIID无效,则使用经纬度算路。

4、起点角度算路
在POI算路中,支持通过NaviPoi对象传入自定义的起点角度,根据不同的出发角度规划出对应合理的路线。需要注意的是,想要使用自定义的起点角度来算路时,则不能使用poiId,且需要传入经纬度信息与合法的角度值。
示例代码:
const appKey = "您的appKey";
const naviInstance: IAMapNavi = AMapNaviFactory.getAMapNaviInstance(getContext().getApplicationContext(), appKey);
// 起点信息
let start: NaviPoi | string | null = null;
// 终点信息
let end: NaviPoi | string | null = null;
start = new NaviPoi(null, new NaviLatLng(40.100204,116.376890), null);
//设置起点角度
start.setDirection(35);
end = new NaviPoi(null, new NaviLatLng(39.941597,116.352869), null);
naviInstance.calculateDriveRouteForPoi(start, end, null, PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT);
5、设置车辆信息
支持在算路前,通过相关接口设置车辆信息,包括车牌号、车型、货车宽高载重,以及算路时是否躲避限行等,充分考虑车牌限号、ETA限行、限高限重等车辆因素给路线规划带来的影响,计算出最合理的行驶路线,为出行带来便捷。
示例代码:
const appKey = "您的appKey";
const naviInstance: IAMapNavi = AMapNaviFactory.getAMapNaviInstance(getContext().getApplicationContext(), appKey);
// 起点信息
let start: NaviPoi | string | null = null;
// 终点信息
let end: NaviPoi | string | null = null;
start = new NaviPoi("龙城花园", null, "B000A8UF3J");
end = new NaviPoi("北京大学", null, "B000A816R6");
const carInfo: AMapCarInfo = new AMapCarInfo();
//设置车牌
carInfo.mCarNumber = "京C123456";
//设置车辆类型, 0-燃油客车,1-燃油货车,2-纯电动客车,3-纯电动货车,4-插电式混动汽车,5-插电式混动货车,11-摩托车
carInfo.mCarType = 1;
//设置货车的轴数,mCarType = 1时候生效,取值[0-255],默认为2
carInfo.mVehicleAxis = 2;
//设置货车的高度,单位:米,mCarType = 1时候生效,取值[0-25.5] 如:1.8,1.5等等。
carInfo.mVehicleHeight = 2;
//设置货车的最大宽度,单位:米,mCarType = 1时候生效,取值[0-25.5] 如:1.8,1.5等等。
carInfo.mVehicleWidth = 2;
//设置货车的核定载重,单位:吨,mCarType = 1时候生效,取值[0-6553.5]
carInfo.mVehicleWeight = 2;
//设置货车的最大长度,单位:米,mCarType = 1时候生效,取值[0-25] 如:1.8,1.5等等,默认6米
carInfo.mVehicleLength = 6;
//设置货车大小, 1-微型货车 2-轻型/小型货车 3-中型货车 4-重型货车
carInfo.mVehicleSize = 2;
//设置货车的总重,即车重+核定载重,单位:吨,mCarType = 1时候生效,取值[0-6553.5]
carInfo.mVehicleLoad = 4.5;
//设置是否躲避车辆限行, true代表躲避车辆限行,false代表不躲避车辆限行。默认为true
carInfo.isRestriction = true;
//设置货车重量是否参与算路, true-重量会参与算路;false-重量不会参与算路。默认为false
carInfo.mVehicleLoadSwitch = true;
naviInstance.setCarInfo(carInfo);
naviInstance.calculateDriveRouteForPoi(start, end, null, PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT);6、途经点算路
最多支持设置 16 个途经点的路线规划。
const appKey = "您的appKey";
const naviInstance: IAMapNavi = AMapNaviFactory.getAMapNaviInstance(getContext().getApplicationContext(), appKey);
// 起点信息
let start: NaviPoi | string | null = null;
// 终点信息
let end: NaviPoi | string | null = null;
//NaviPoi类型
start = new NaviPoi("龙城花园", null, "B000A8UF3J");
end = new NaviPoi("北京大学", null, "B000A816R6");
// 途经点信息
const wayPoints: ArrayList<NaviPoi> = new ArrayList<NaviPoi>();
wayPoints.add(new NaviPoi("途经点1", null, "B000A805M7"));
wayPoints.add(new NaviPoi("途经点2", null, "B0FFFAADBU"));
wayPoints.add(new NaviPoi("途经点3", null, "B0FFF5BER7"));
// 经纬度算路
naviInstance.calculateDriveRouteForPoi(start, end, wayPoints, PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT);

货车路线规划
货车的路径规划策略中,会将货车特有的限高、限重、车型等信息加入到路径规划策略中进行计算。
特别注意:货车路径规划是收费接口,您如果申请试用或者正式应用都请通过工单系统提交商务合作类工单进行沟通,否则默认是无法算路成功的。
货车的算路接口和驾车都是一样的,SDK是通车辆信息来区别是否为货车的。AMapCarInfo的 CarType 为1\3\5时都为货车。
const carInfo: AMapCarInfo = new AMapCarInfo();
//设置车牌
carInfo.mCarNumber = "京C123456";
//设置车辆类型, 0-燃油客车,1-燃油货车,2-纯电动客车,3-纯电动货车,4-插电式混动汽车,5-插电式混动货车,11-摩托车
carInfo.mCarType = 1;
//设置货车的轴数,mCarType = 1时候生效,取值[0-255],默认为2
carInfo.mVehicleAxis = 2;
//设置货车的高度,单位:米,mCarType = 1时候生效,取值[0-25.5] 如:1.8,1.5等等。
carInfo.mVehicleHeight = 2;
//设置货车的最大宽度,单位:米,mCarType = 1时候生效,取值[0-25.5] 如:1.8,1.5等等。
carInfo.mVehicleWidth = 2;
//设置货车的核定载重,单位:吨,mCarType = 1时候生效,取值[0-6553.5]
carInfo.mVehicleWeight = 2;
//设置货车的最大长度,单位:米,mCarType = 1时候生效,取值[0-25] 如:1.8,1.5等等,默认6米
carInfo.mVehicleLength = 6;
//设置货车大小, 1-微型货车 2-轻型/小型货车 3-中型货车 4-重型货车
carInfo.mVehicleSize = 2;
//设置货车的总重,即车重+核定载重,单位:吨,mCarType = 1时候生效,取值[0-6553.5]
carInfo.mVehicleLoad = 4.5;
//设置是否躲避车辆限行, true代表躲避车辆限行,false代表不躲避车辆限行。默认为true
carInfo.isRestriction = true;
//设置货车重量是否参与算路, true-重量会参与算路;false-重量不会参与算路。默认为false
carInfo.mVehicleLoadSwitch = true;
naviInstance.setCarInfo(carInfo);注意,务必在算路前进行车辆信息的设置,否则需要等到下次算路才生效。
处理结果:
当路线规划成功时,会触发 AMapNaviListener 的 onCalculateRouteSuccess 回调,在该回调函数中,可以获取路线对象,进行规划路线的显示:
this.naviInstance?.addAMapNaviListener({
onCalculateRouteSuccess: (routeResult: IAMapCalcRouteResult | null) => {
// 获取路线数据对象
const paths: HashMap<number, AMapNaviPath> | null = this.naviInstance!.getNaviPaths();
// 绘制显示路径
...
}
})也可以直接开启导航:
this.naviInstance?.addAMapNaviListener({
onCalculateRouteSuccess: (routeResult: IAMapCalcRouteResult | null) => {
// 开启导航
this.naviInstance!.startNavi(NaviType.GPS)
}
})如果路线规划失败,则会触发 AMapNaviListener 的 onCalculateRouteFailure 回调,可以在此回调中来执行相应处理逻辑
