路线规划模块提供完整的算路能力,包括发起算路请求、取消算路、路线选择、路线偏好设置、车辆信息同步等功能。
支持驾车、新能源、摩托车、货车等多种出行方式。
算路结果通过 BNIRoutePlanListener 回调返回,每条路线包含距离、时间、红绿灯数、高速费用等详细信息。
核心特性:
支持驾车/新能源/摩托车/货车四种算路模式
路线偏好可配置(推荐、躲避拥堵、高速优先等)
多路线结果支持选择切换
车辆信息(车牌、能源类型、ETC 等)持久化同步
算路过程可取消
export interface BNIRoutePlanInterface {addRoutePlanListener(listener: BNIRoutePlanListener): void;removeRoutePlanListener(listener: BNIRoutePlanListener): void;routePlan(param: BNAbilityRoutePlanParam): Promise<boolean>;cancelRoutePlan(calcId: number): boolean;setRoutePrefers(prefers: number[], routePlanMode?: BNRoutePlanModeType): boolean;getRoutePrefers(routePlanMode?: BNRoutePlanModeType): number[];setPlateNumberInfo(value: BNAbilityPlateNumberInfo | undefined): void;getPlateNumberInfo(): BNAbilityPlateNumberInfo;selectRoute(routeIdx: number): boolean;selectRouteByMrsl(routeIdx: number, mrsl: string): boolean;getSelectRouteIdx(): number;syncCarInfoModel(carInfo: BNICarInfo): Promise<boolean>;syncMotoInfoModel(motoInfo: BNIMotoInfo): Promise<boolean>;syncTruckInfoModel(truckInfo: BNITruckInfo): Promise<boolean>;setIsMultiRouteEnabled(isEnabled: boolean): void;readonly isMultiRouteEnabled: boolean;/*** 货车偏航时的路线模式* @param yawMode 0 - 默认策略,1 - 偏航路线 API 提供,2 - 偏航回到进入导航时所选的路线*/setTruckYawMode(yawMode: 0 | 1 | 2): void;/** 货车偏航时的路线模式 */readonly truckYawMode: 0 | 1 | 2;}
export interface BNIRoutePlanListener {/*** 算路开始,回调算路ID,可通过这个ID取消算路*/onRoutePlanStart?: (routePlanID: number) => void;/*** 算路成功*/onRoutePlanSuccess?: (result: BNIRouteItem[] | undefined, calcId: number) => void;/*** 算路失败*/onRoutePlanFailed?: (errorCode: number) => void;}
export class BNAbilityRoutePlanParam {/** 算路节点数组(起终点/途经点) */public nodes?: BNAbilityRoutePlanNodeParam[];/** 算路类型: 驾车/新能源/货车/摩托车 */public routePlanMode: BNRoutePlanModeType = BNRoutePlanModeType.Car;/** 路线规划来源:在导航内规划或在导航外规划,默认在导航外规划 */public routePlanSource?: BNAbilityRoutePlanSource = BNAbilityRoutePlanSource.OutsideNavi;/** 是否启用货车经验路线(Truck 模式时生效) */public enableTruckExperienceRoute?: boolean = false;/** 仅货车路线规划:轨迹ID */public trajectorySid?: string = "";/** 仅货车路线规划:轨迹类型 */public trajectoryType?: number = 0;}export enum BNAbilityRoutePlanSource {InNavi = 0, // 在导航内规划OutsideNavi = 1 // 在导航外规划}
export enum BNRoutePreferStatus {RECOMMEND = 0X00000001, // 智能推荐TIME_FIRST = 0X00000100, // 时间优先LESS_CHARGE = 0X00000008, // 少收费AVOID_JAM = 0X00000010, // 少拥堵NO_HIGHWAY = 0X00000004, // 不走高速HIGHWAY_FIRST = 0X00000200, // 高速优先CAR_NUM = 0X00000020, // 使用车牌ECONOMICAL = 0x00000400, // 省钱路线}
export interface BNICarInfo {/** 省份简称(如:粤、京等) */province: string;/** 车牌号码(不含省份,如:B12345) */plateNum: string;/** 动力类型 */powerType: BNIRoutePlanPowerType;/** 通行证数量 */passRuleCount: number;/** 通行证规则 */passRule: Array<BNIRoutePlanPassRule>;}
export interface BNIMotoInfo {/** 省份简称 */province: string;/** 车牌号码(不含省份,如:B12345) */plateNum: string;/** 动力类型 */powerType: BNIRoutePlanPowerType;/** 摩托车排量(cc) */displacement: number;}
export interface BNITruckInfo {/** 省份简称 */province: string;/** 车牌号码(不含省份) */plateNum: string;/** 车牌颜色 */plateColor: BNRoutePlanPlateType;/** 是否为挂车 */isTrailer: boolean;/** 动力类型 */powerType: BNIRoutePlanPowerType;/** 货车类型 */truckType: BNTruckType;/** 总重,单位:吨 */totalWeight: number;/** 载重,单位:吨 */loadWeight: number;/** 车长,单位:米 */truckLength: number;/** 车宽,单位:米 */truckWidth: number;/** 车高,单位:米 */truckHeight: number;/** 轴数 */axleCnt: BNTruckAxleCnt;/** 排放标准 */emissionStandard: BNTruckEmissionStandard;/** ETC信息 */etcInfo: BNTruckETCInfo;/** 百公里油耗,单位:升 */oilCost: number;}
注册算路结果监听器。SDK 不会强持有该 listener,不影响其生命周期。
参数说明:
listener - 实现 BNIRoutePlanListener 接口的对象
移除算路结果监听器。
发起算路请求,结果通过 BNIRoutePlanListener 回调返回。
参数说明:
param - BNAbilityRoutePlanParam 算路参数
nodes - 起终点/途经点节点数组
routePlanMode - 算路模式(Car/Energy/Truck/Moto)
routePlanSource - 路线规划来源:InNavi(导航内规划)、OutsideNavi(导航外规划,默认)
enableTruckExperienceRoute - 货车经验路线开关
trajectorySid - 仅货车:轨迹ID,用于基于已有轨迹规划路线
trajectoryType - 仅货车:轨迹类型标识
返回值:
Promise<boolean> - 请求是否成功提交
示例:
const param = new BNAbilityRoutePlanParam();param.nodes = [startNode, endNode];param.routePlanMode = BNRoutePlanModeType.Car;const success = await sdkService.routePlan.routePlan(param);
取消正在进行的算路请求。
参数说明:
calcId - 由 onRoutePlanStart 回调返回的算路 ID
返回值:
true - 取消成功;false - 取消失败或 calcId 不匹配
设置路线规划偏好,影响算路结果的排序。
参数说明:
prefers - BNRoutePreferStatus 枚举值数组,支持组合多个偏好
RECOMMEND = 智能推荐(默认)
TIME_FIRST = 时间优先
LESS_CHARGE = 少收费
AVOID_JAM = 少拥堵
NO_HIGHWAY = 不走高速
HIGHWAY_FIRST = 高速优先
ECONOMICAL = 省钱路线
注意:CAR_NUM 用于标记车辆限行,不要单独传
routePlanMode(可选)- 车辆类型,默认为 BNRoutePlanModeType.Car,支持按不同出行方式分别配置偏好
示例:
// 组合偏好:少拥堵 + 高速优先(驾车模式)sdkService.routePlan.setRoutePrefers([BNRoutePreferStatus.AVOID_JAM,BNRoutePreferStatus.HIGHWAY_FIRST]);// 货车模式单独设置偏好sdkService.routePlan.setRoutePrefers([BNRoutePreferStatus.LESS_CHARGE], BNRoutePlanModeType.Truck);
获取当前设置的路线偏好。未设置时默认返回 [RECOMMEND]。
参数说明:
routePlanMode(可选)- 车辆类型,默认为 BNRoutePlanModeType.Car
设置车牌信息(驾车/新能源)。已废弃,请使用 syncCarInfoModel 替代。
获取当前设置的车牌信息。
从算路结果中选择一条路线作为当前路线。
参数说明:
routeIdx - 算路结果返回的路线下标索引(从 0 开始)
通过 MRSL 标识符精确选择路线。
参数说明:
routeIdx - 路线下标索引
mrsl - 路线的 MRSL 唯一标识符
获取当前选中路线的下标索引。-1 表示失败。
持久化存储小客车/新能源车辆信息。
参数说明(BNICarInfo):
province - 省份简称(如:粤、京)
plateNum - 车牌号码(不含省份)
powerType - 动力类型:FuelVehicle(油车)、ElectricVehicle(纯电)、HybridElectricVehicle(混动)
passRuleCount - 通行证数量
passRule - 通行证规则数组
返回值:
Promise<boolean> - 存储是否成功
示例:
const carInfo = BNCarInfo.getBuilder().setProvince('京').setPlateNum('A12345').setPowerType(BNIRoutePlanPowerType.ElectricVehicle).build();await sdkService.routePlan.syncCarInfoModel(carInfo);
持久化存储摩托车信息。
参数说明(BNIMotoInfo):
province - 省份简称
plateNum - 车牌号码(不含省份)
powerType - 动力类型
displacement - 摩托车排量,单位:cc
返回值:
Promise<boolean> - 存储是否成功
持久化存储货车信息。
参数说明(BNITruckInfo):
province - 省份简称
plateNum - 车牌号码(不含省份)
plateColor - 车牌颜色:Yellow(黄牌)、Blue(蓝牌)、Green(绿牌)、Black(黑牌)、White(白牌)
isTrailer - 是否为挂车
powerType - 动力类型
truckType - 货车类型:Micro(微型)、Light(轻型)、Medium(中型)、Heavy(重型)
totalWeight - 总重,单位:吨
loadWeight - 载重,单位:吨
truckLength - 车长,单位:米
truckWidth - 车宽,单位:米
truckHeight - 车高,单位:米
axleCnt - 轴数:TwoAxles ~ SixAxles
emissionStandard - 排放标准:National1 ~ National6
etcInfo - ETC 信息:Enable(有)、Unable(无)
oilCost - 百公里油耗,单位:升
返回值:
Promise<boolean> - 存储是否成功
示例:
const truckInfo = BNTruckInfo.getBuilder().setProvince('京').setPlateNum('B67890').setPlateColor(BNRoutePlanPlateType.Yellow).setTruckType(BNTruckType.Heavy).setTotalWeight(10).setTruckLength(10).setTruckWidth(2.55).setTruckHeight(4.2).setAxleCnt(BNTruckAxleCnt.SixAxles).build();await sdkService.routePlan.syncTruckInfoModel(truckInfo);
设置货车偏航时的路线计算策略。
参数说明:
yawMode - 偏航模式
0 = 默认策略(SDK 自行决策)
1 = 偏航路线由 API 提供
2 = 偏航回到进入导航时所选的路线
使用场景:
货车限行路段偏航后,强制回到原规划路线
自定义偏航处理逻辑
示例:
// 设置货车偏航后回到原路线sdkService.routePlan.setTruckYawMode(2);
获取当前货车偏航策略,只读属性。
返回值:
0 = 默认策略
1 = API 提供偏航路线
2 = 回到原路线
import { BNRoutePlanModeType, BNAbilityRoutePlanParam, BNIRoutePlanListener } from '@ohos/baidunavigation';// 注册监听器class MyRoutePlanListener implements BNIRoutePlanListener {onRoutePlanStart(routePlanID: number) {console.log(`算路开始,ID: ${routePlanID}`);}onRoutePlanSuccess(result: BNIRouteItem[] | undefined, calcId: number) {if (result && result.length > 0) {console.log(`算路成功,共 ${result.length} 条路线`);sdkService.routePlan.selectRoute(0); // 选择第一条}}onRoutePlanFailed(errorCode: number) {console.error(`算路失败,错误码: ${errorCode}`);}}const listener = new MyRoutePlanListener();sdkService.routePlan.addRoutePlanListener(listener);// 设置偏好后发起算路sdkService.routePlan.setRoutePrefers([BNRoutePreferStatus.AVOID_JAM,BNRoutePreferStatus.HIGHWAY_FIRST]);const param = new BNAbilityRoutePlanParam();param.nodes = [startNode, endNode];param.routePlanMode = BNRoutePlanModeType.Car;await sdkService.routePlan.routePlan(param);// 结束时移除sdkService.routePlan.removeRoutePlanListener(listener);
let currentCalcId = -1;class MyListener implements BNIRoutePlanListener {onRoutePlanStart(routePlanID: number) {currentCalcId = routePlanID;}}// 用户取消时if (currentCalcId >= 0) {const cancelled = sdkService.routePlan.cancelRoutePlan(currentCalcId);console.log(`取消: ${cancelled}`);}
// 1. 同步货车信息const truckInfo = BNTruckInfo.getBuilder().setProvince('京').setPlateNum('B67890').setTruckType(BNTruckType.Heavy).setTotalWeight(10).setTruckLength(10).setTruckWidth(2.55).setTruckHeight(4.2).setAxleCnt(BNTruckAxleCnt.SixAxles).setEmissionStandard(BNTruckEmissionStandard.National6).build();await sdkService.routePlan.syncTruckInfoModel(truckInfo);// 2. 发起货车算路const param = new BNAbilityRoutePlanParam();param.nodes = [startNode, endNode];param.routePlanMode = BNRoutePlanModeType.Truck;param.enableTruckExperienceRoute = true;await sdkService.routePlan.routePlan(param);
// 使用已有轨迹进行货车路线规划const param = new BNAbilityRoutePlanParam();param.nodes = [startNode, endNode];param.routePlanMode = BNRoutePlanModeType.Truck;param.routePlanSource = BNAbilityRoutePlanSource.InNavi; // 导航内规划param.trajectorySid = "trajectory_12345"; // 轨迹IDparam.trajectoryType = 1; // 轨迹类型await sdkService.routePlan.routePlan(param);
上一篇
下一篇