地图匹配
功能介绍
地图匹配能力负责接收 GNSS(卫星定位)、DR(航位推算) 等车辆定位数据,通过 SDK 定位引擎进行 地图匹配(Map Matching),输出稳定、连续且贴合道路的车辆位置与道路上下文信息,为 HMI、算路、导航及地图渲染等功能提供位置基础能力。
本文档建议按以下顺序阅读:
| 序号 | 文档 | 说明 |
|---|---|---|
| 1 | 位置输入 | 通过 LocationProvider 注入原始 GNSS 或 DR 处理后的 VehicleLocation |
| 2 | 地图匹配输出 | 通过 PositionEventListener 接收地图匹配后的车辆位置 Location 与 道路上下文 PositionInfo |
| 3 | 平行路校准 | 通过 onCandidateRoadDetected 与 RoadCalibrator,处理主辅路、高架路等多候选道路场景 |
数据流概览

核心接口
| 接口 / 类 | 作用 |
|---|---|
LocationProvider |
位置输入抽象类;实现 onStart / onStop,并通过 updateLocation(...) 注入车辆位置数据 |
VehicleLocation |
单帧位置输入数据结构,包含坐标、航向、速度、卫星数、DR 累计量等信息 |
SDK.injectLocationProvider(...) |
注册自定义位置输入源;传入 null 时回退系统定位 |
NavigationService / NavigationServiceOptions |
创建导航服务并完成定位引擎初始化,以及日志、算法等相关配置 |
NavigationService.eventHub |
事件分发通道,用于注册定位、导航等事件监听 |
PositionEventListener |
地图匹配结果监听接口,包含 onLocationUpdated(...) 与 onCandidateRoadDetected(...) 等回调 |
PositionInfo |
地图匹配后的道路上下文信息,包含道路、区域、隧道、路口等状态 |
RoadCalibrator |
多候选道路场景下,用于获取候选道路列表,并通过 setRoad(...) 对地图匹配结果进行道路校准 |
航位推算(DR)协同
- 弱 GNSS 场景连续性: 在隧道、城市峡谷、立交重叠区域等 GNSS 不稳定场景中,DR 可提供连续位姿输入,降低车位跳变。
- 匹配稳定性: DR 的速度、航向、累计里程等信息可帮助定位引擎提升道路吸附稳定性,减少主辅路和高架层级误匹配。
- 职责与边界: 车端负责 GNSS/IMU/车身信号采集输入到DR,DR融合数据输出融合定位结果;地图匹配模块仅消费通过
LocationProvider输入的VehicleLocation,并输出匹配结果与道路上下文。DR 能力原理与输出定义见 航位推算 - 闭环机制: DR融合定位 ->
VehicleLocation(输入)→ 地图匹配输出PositionInfo.feedback(校准反馈)→ DR 模块按项目策略回灌修正 → 下一帧VehicleLocation再输入,引导稳定收敛。
定位引擎(Position Engine)初始化与配置
定位引擎(Position Engine)在创建 NavigationService 时完成初始化。
调用 NavigationService.Factory.createInstance(...) 时需传入 NavigationServiceOptions 用于配置日志、算法参数等选项。
NavigationService 必须在 SDK initialize(...) 成功之后创建,详见 SDK 初始化。
定位引擎相关配置(NavigationServiceOptions)
| API | 说明 | 推荐场景 | 默认值 |
|---|---|---|---|
setPositionAlgorithmConfiguration(jsonConfig) |
配置定位引擎内部算法参数,参数为 JSON 字符串,结构需与定位配置文件保持一致 | 需要按车型或项目定制定位算法参数时 | 未设置 |
enableSelfPropellingUponWeakGPS(enabled) |
GNSS 信号丢失时,会在隧道等场景触发自推算;开启后建议持续提供有效的 speed,以提升推算位置准确性。 |
无外部 DR,且存在隧道丢失 GNSS 场景时 | false |
enableHeadingCalibrateEnabled(enabled) |
使用车辆轨迹方向校准输入航向,以提升地图匹配稳定性。 | 移动导航,需要提升地图匹配稳定性时 | false |
enablePositionEngineLog(enabled) |
开启或关闭定位引擎文件日志 | 联调、问题定位、路测分析阶段(生产环境建议关闭) | false |
setPositionEngineLogStorePath(path) |
定位引擎日志目录,须已存在且可写;默认不设置;当已开启日志且未指定目录时,日志默认写入 PE_Logs 子目录 |
已开启日志,且需要指定日志存储目录时 | 未设置 |
创建 NavigationService 示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
定位引擎日志
定位引擎日志与 TaLog 相互独立,用于记录定位引擎内部运行信息,包括地图匹配、轨迹推算及 GNSS 处理等过程。
配置时机及 API 说明见 日志管理 — 定位引擎日志。生产环境不建议长期开启。
快速接入示例
以下示例展示从位置数据输入到地图匹配结果输出的完整链路(需已完成 SDK 初始化,见 初始化)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | |
关键要点
| 主题 | 说明 |
|---|---|
| 输入频率 | 自定义 LocationProvider 支持 1~15 Hz;未注入或 null 时默认 Provider 为 4 Hz |
| 坐标系 | WGS84;有效范围:纬度 [-85, 85],经度 [-180, 180] |
| 隧道/GNSS丢失 | 可使用 VehicleLocation.INVALID_COORDINATE,此时仅需更新 speed、satelliteNumber 等字段 |
| 算路起点 | 使用 onLocationUpdated 回调的 Location 构造 GeoLocation(Location),以携带 道路匹配信息(如 Link Id ) |
| off-road | 当positionInfo.isOffRoad() 为 true 时表示未匹配到道路(currentRoad == null) |
| 初始化 | NavigationService.Factory.createInstance(options),必须在 SDK 初始化之后调用 |
| 日志 | 通过enablePositionEngineLog / setPositionEngineLogStorePath配置,见 日志管理 — 定位引擎日志 |
注意事项
- 初始化顺序(必须): 先在 SDK
initialize(...)成功后创建NavigationService完成定位引擎初始化,再注入位置数据源并注册PositionEventListener。 - 配置决策时机(必须):
NavigationServiceOptions中的定位引擎能力开关(如enableSelfPropellingUponWeakGPS)应在接入阶段确定,不可以在运行中临时切换。 - 日志策略(建议): 定位引擎日志仅用于联调与问题定位,生产环境不建议长期开启;配置方法见 日志管理 — 定位引擎日志。
- 生命周期管理(必须): 组件或服务销毁时应释放
LocationProvider与PositionEventListener相关资源,避免泄漏。 - 权限要求(必须): 使用 GNSS 或系统定位回退能力时,需确保已授予定位权限。