Skip to content

沿途交通

功能介绍

导航过程中,SDK 会周期性推送当前导航路线前方的沿路交通信息,包括分段路况(flow)与交通事件(incident)。HMI 可用于:

  • 在路线条/交通条上展示前方拥堵分布与延误
  • 在地图上按路况着色(见 路线渲染
  • 列出事故、施工、封闭等事件,供用户查看或触发更新路线请求

核心接口:

接口 说明
NavigationEventListener.onAlongRouteTrafficUpdated(alongRouteTraffic) 接收沿路交通更新
NavigationServiceOptions.Builder.setTrafficFetchRange(seconds) 配置沿路交通采集/推送的时间范围

前置条件:startNavigation 并注册 NavigationEventListener(本回调为必实现方法,无默认空实现)。

流程概览

1
2
3
4
5
6
7
8
9
创建 NavigationService 时 setTrafficFetchRange(可选,默认 3600 秒)
        ↓
startNavigation
        ↓
SDK 周期性推送 onAlongRouteTrafficUpdated(AlongRouteTraffic)
        ↓
HMI 解析 flow / incident → 更新交通条、事件列表
        ↓
地图:RoutesController.refreshAlongRouteTraffic(alongRouteTraffic) 刷新路线着色

配置采集范围:setTrafficFetchRange

创建 NavigationService 之前配置;导航中不可动态修改。

1
2
3
NavigationServiceOptions.Builder()
    .setTrafficFetchRange(3600)   // 单位:秒
    .build()
参数 说明 默认
seconds 沿路交通采集范围(自当前位置起,沿路线方向的预计行驶时间 3600(1 小时)
有效范围 1Integer.MAX_VALUEInteger.MAX_VALUE 表示覆盖整条路线

语义: SDK 仅采集并推送该时间范围内、且会影响预计到达时间(ETA) 的沿路交通数据。范围越小,数据量越少;范围越大,可提前展示更远路段的路况,但更新负载更高。

接收更新:onAlongRouteTrafficUpdated

1
fun onAlongRouteTrafficUpdated(alongRouteTraffic: AlongRouteTraffic)

导航会话激活期间,SDK 周期性下发最新沿路交通。回调中的 routetotalRouteDistance 等字段由 SDK 在分发前补全,可直接使用。

AlongRouteTraffic 字段

字段 说明
route 当前导航路线(Route
totalRouteDistance 路线总长度(米)
alongRouteTrafficCollectDistance 本次采集到的交通信息覆盖距离(米)
collectedStartLegIndex / Step / Edge 采集区间起点在路线上的 leg / step / edge 索引(从 0 起)
collectedEndLegIndex / Step / Edge 采集区间终点索引
alongRouteTrafficFlow 分段路况列表,见下表;若列表为空(或 null),通常表示网络环境异常,HMI 可据此清空路况展示
alongRouteTrafficIncidents 交通事件列表,见下表;若列表为空(或 null),通常表示网络环境异常,HMI 可据此清空事件展示
additionalInfo 调试信息(请求/响应时间戳)

AlongRouteTrafficFlowSegment(分段路况)

字段 说明
startLegIndex / startStepIndex / startEdgeIndex 本段 flow 起点索引
startEdgeOffset 起点 edge 内偏移(米);负值表示无效
endLegIndex / endStepIndex / endEdgeIndex 本段 flow 终点索引
endEdgeOffset 终点 edge 内偏移(米);负值表示无效
distanceFromRouteStart 本段起点距路线起点的距离(米)
flowLength 本段长度(米)
flowSpeed 平均速度(米/秒);0 表示阻塞;负值表示无数据
congestionLevel 拥堵等级,见 TrafficLevel

TrafficLevel 常用常量

常量 说明
FREE_FLOW 畅通
HEAVY 行驶缓慢
SLOW_SPEED 缓行
CONGESTED 拥堵
QUEUING 严重拥堵
CLOSED 封闭
UNKNOWN_LEVEL 未知

AlongRouteTrafficIncidentInfo(交通事件)

字段 说明
delayTime 事件造成的延误时间(秒)
routeID 所属路线 ID
legIndex / stepIndex / edgeIndex 事件在路线上的位置
trafficIncidentType 事件类型,见 TrafficIncidentType(如 ACCIDENTCONSTRUCTIONROAD_CLOSURE
trafficIncidentSeverity 严重程度,见 TrafficIncidentSeverity
trafficIncidentUrgency 紧急程度,见 TrafficIncidentUrgencyLevel
blocking 是否阻塞通行
description 事件描述
incidentLocation 事件位置(TrafficIncidentLocation
averageSpeed / maxSpeedLimit 受影响路段平均/最高限速(米/秒);负值表示无数据
affectedLength 受影响路段长度(米);负值表示无数据
affectedEdges 受影响的 edge 列表

地图刷新

沿路交通更新后,将 AlongRouteTraffic 原样传入 RoutesController.refreshAlongRouteTraffic 即可刷新路线路况着色,无需重新算路或 addRouteLine。详见 路线渲染

示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// 创建 NavigationService 时配置采集范围
val navOptions = NavigationServiceOptions.Builder()
    .setTrafficFetchRange(3600)
    .build()

// 导航中接收沿路交通
override fun onAlongRouteTrafficUpdated(alongRouteTraffic: AlongRouteTraffic) {
    mainHandler.post {
        // 更新 HMI 交通条 / 事件列表
        trafficBar.updateTrafficInfo(alongRouteTraffic)
        alongRouteTraffic.alongRouteTrafficIncidents?.let { showIncidentList(it) }

        // 地图刷新路线路况着色
        mapView.routesController()?.refreshAlongRouteTraffic(alongRouteTraffic)
    }
}

与其它能力的关系

能力 关系
更优的路 BetterRouteProposal.blockingIncidents / blockingFlows 描述更优路检测时的阻塞交通,数据模型与本文 incident / flow 相同
换路通知 换路成功后沿路交通会随新路线重新推送
算路结果 首屏路线上的交通字段可用于算路预览;导航中持续更新以本回调为准

注意事项

  • setTrafficFetchRange 须在创建 NavigationService 时设置,导航中无法修改。
  • 回调线程: Message 线程,更新 UI / MapView 请切主线程。
  • additionalInfo 仅供调试,生产环境请勿依赖。
  • 地图着色仅刷新路况颜色,不改变路线几何;换路后需按 换路通知 更新路线上下文。
  • 首次 / 换路后首次回调: 首次开始导航或换路完成后,onAlongRouteTrafficUpdated 通常会再回调一次;该次 Traffic 来自 Cloud 算路结果自带的 traffic,仅包含 alongRouteTrafficFlow,不包含 alongRouteTrafficIncidents。算路结果中的 traffic 与本地缓存的底图 Traffic 可能采集于不同时刻,展示上可能存在差异;待 SDK 下一次沿路 Traffic 请求返回后,二者会刷新为一致。
  • 空列表: alongRouteTrafficFlowalongRouteTrafficIncidents 为空时,通常表示网络环境异常,应清空 HMI 沿路 Traffic 展示(交通条、事件列表、地图路况着色等)。
  • 交通数据具有时效性,以 SDK 周期性推送为准;弱网时可能出现数据延迟。