百度地图开放平台
更新时间: 2026/07/22 20:34
驾车路线规划
下载开发文档
概述

路线规划模块提供完整的算路能力,包括发起算路请求、取消算路、路线选择、路线偏好设置、车辆信息同步等功能。
支持驾车、新能源、摩托车、货车等多种出行方式。
算路结果通过 BNIRoutePlanListener 回调返回,每条路线包含距离、时间、红绿灯数、高速费用等详细信息。
核心特性

  • 支持驾车/新能源/摩托车/货车四种算路模式

  • 路线偏好可配置(推荐、躲避拥堵、高速优先等)

  • 多路线结果支持选择切换

  • 车辆信息(车牌、能源类型、ETC 等)持久化同步

  • 算路过程可取消

1. 核心接口
1.1 路线规划接口 BNIRoutePlanInterface
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;
}
1.2 算路监听器 BNIRoutePlanListener
export interface BNIRoutePlanListener {
/**
* 算路开始,回调算路ID,可通过这个ID取消算路
*/
onRoutePlanStart?: (routePlanID: number) => void;
/**
* 算路成功
*/
onRoutePlanSuccess?: (result: BNIRouteItem[] | undefined, calcId: number) => void;
/**
* 算路失败
*/
onRoutePlanFailed?: (errorCode: number) => void;
}
1.3 算路参数 BNAbilityRoutePlanParam
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 // 在导航外规划
}
1.4 路线偏好枚举 BNRoutePreferStatus
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, // 省钱路线
}
1.5 车辆信息类型
小客车/新能源 BNICarInfo
export interface BNICarInfo {
/** 省份简称(如:粤、京等) */
province: string;
/** 车牌号码(不含省份,如:B12345) */
plateNum: string;
/** 动力类型 */
powerType: BNIRoutePlanPowerType;
/** 通行证数量 */
passRuleCount: number;
/** 通行证规则 */
passRule: Array<BNIRoutePlanPassRule>;
}
摩托车 BNIMotoInfo
export interface BNIMotoInfo {
/** 省份简称 */
province: string;
/** 车牌号码(不含省份,如:B12345) */
plateNum: string;
/** 动力类型 */
powerType: BNIRoutePlanPowerType;
/** 摩托车排量(cc) */
displacement: number;
}
货车 BNITruckInfo
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;
}
2. 功能详解
2.1 监听器管理
addRoutePlanListener(listener: BNIRoutePlanListener): void

注册算路结果监听器。SDK 不会强持有该 listener,不影响其生命周期。
参数说明

  • listener - 实现 BNIRoutePlanListener 接口的对象

removeRoutePlanListener(listener: BNIRoutePlanListener): void

移除算路结果监听器。

2.2 发起与取消算路
routePlan(param: BNAbilityRoutePlanParam): Promise<boolean>

发起算路请求,结果通过 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);
cancelRoutePlan(calcId: number): boolean

取消正在进行的算路请求。
参数说明

  • calcId - 由 onRoutePlanStart 回调返回的算路 ID

返回值

  • true - 取消成功;false - 取消失败或 calcId 不匹配

2.3 路线偏好
setRoutePrefers(prefers: number[], routePlanMode?: BNRoutePlanModeType): boolean

设置路线规划偏好,影响算路结果的排序。
参数说明

  • 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);
getRoutePrefers(routePlanMode?: BNRoutePlanModeType): number[]

获取当前设置的路线偏好。未设置时默认返回 [RECOMMEND]
参数说明

  • routePlanMode(可选)- 车辆类型,默认为 BNRoutePlanModeType.Car

2.4 车牌信息
setPlateNumberInfo(value: BNAbilityPlateNumberInfo | undefined): void

设置车牌信息(驾车/新能源)。已废弃,请使用 syncCarInfoModel 替代。

getPlateNumberInfo(): BNAbilityPlateNumberInfo

获取当前设置的车牌信息。

2.5 路线选择
selectRoute(routeIdx: number): boolean

从算路结果中选择一条路线作为当前路线。
参数说明

  • routeIdx - 算路结果返回的路线下标索引(从 0 开始)

selectRouteByMrsl(routeIdx: number, mrsl: string): boolean

通过 MRSL 标识符精确选择路线。
参数说明

  • routeIdx - 路线下标索引

  • mrsl - 路线的 MRSL 唯一标识符

getSelectRouteIdx(): number

获取当前选中路线的下标索引。-1 表示失败。

2.6 车辆信息同步
syncCarInfoModel(carInfo: BNICarInfo): Promise<boolean>

持久化存储小客车/新能源车辆信息。
参数说明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);
syncMotoInfoModel(motoInfo: BNIMotoInfo): Promise<boolean>

持久化存储摩托车信息。
参数说明BNIMotoInfo):

  • province - 省份简称

  • plateNum - 车牌号码(不含省份)

  • powerType - 动力类型

  • displacement - 摩托车排量,单位:cc

返回值

  • Promise<boolean> - 存储是否成功

syncTruckInfoModel(truckInfo: BNITruckInfo): 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);
2.7 货车偏航策略
setTruckYawMode(yawMode: 0 | 1 | 2): void

设置货车偏航时的路线计算策略。
参数说明

  • yawMode - 偏航模式

  • 0 = 默认策略(SDK 自行决策)

  • 1 = 偏航路线由 API 提供

  • 2 = 偏航回到进入导航时所选的路线

使用场景

  • 货车限行路段偏航后,强制回到原规划路线

  • 自定义偏航处理逻辑

示例

// 设置货车偏航后回到原路线
sdkService.routePlan.setTruckYawMode(2);
readonly truckYawMode: 0 | 1 | 2

获取当前货车偏航策略,只读属性。
返回值

  • 0 = 默认策略

  • 1 = API 提供偏航路线

  • 2 = 回到原路线

3. 使用示例
3.1 完整算路流程
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);
3.2 取消算路
let currentCalcId = -1;
class MyListener implements BNIRoutePlanListener {
onRoutePlanStart(routePlanID: number) {
currentCalcId = routePlanID;
}
}
// 用户取消时
if (currentCalcId >= 0) {
const cancelled = sdkService.routePlan.cancelRoutePlan(currentCalcId);
console.log(`取消: ${cancelled}`);
}
3.3 货车算路
// 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);
3.4 基于轨迹的货车算路
// 使用已有轨迹进行货车路线规划
const param = new BNAbilityRoutePlanParam();
param.nodes = [startNode, endNode];
param.routePlanMode = BNRoutePlanModeType.Truck;
param.routePlanSource = BNAbilityRoutePlanSource.InNavi; // 导航内规划
param.trajectorySid = "trajectory_12345"; // 轨迹ID
param.trajectoryType = 1; // 轨迹类型
await sdkService.routePlan.routePlan(param);

上一篇

导航地图控制

下一篇

多路线导航
本篇文章对您是否有帮助?