• 网联车辆平台间协同服务信息交互规范

    1 范围

    本标准规定了智能网联车运营平台间交通信息服务数据传输规范。
    本标准适用于智能网联车运营平台间交通信息服务数据传输交互。

    2 规范性引用文件

    下列文件对于本标准的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本标准。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本标准。
    GB/T 2260-2007 中华人民共和国行政区划代码
    GB/T 29100—2012 道路交通信息服务 交通事件分类与编码
    ISO 19162:2019 Geographic information — Well-known text representation of coordinate reference systems
    GA/T 115-2020 《道路交通拥堵度评价方法》

    3 术语和定义

    下列术语和定义适用于本标准。

    3.1 智能网联车载终端 Intelligent Connected Vehicle terminal

    搭载或嵌入机动车内,能够主动检测车辆位置、状态,并具有现代无线通信能力,可向外部发送和接收数据的装置。

    3.2 智能网联车辆系统平台 Intelligent Connected Vehicle platform

    通过 4G/5G 及演进的移动通信系统、导航定位及大数据和云平台等技术,为智能网联车辆或智能网联车载终端提供数据信息与管理服务的计算机系统平台。以下简称系统平台。

    3.3 路段 link

    各系统平台中所使用的矢量地图中的路段,具有方向性的道路区段,由两个端点界定。

    3.4 WKT 几何对象 well-known text

    WKT 是开放地理空间联盟 OGC(Open GIS Consortium)制定的一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。
    事件 event
    最基础、最常用的交通事件信息,如交通状态信息、交通事件/事故、道路施工、气象信息、道路状况、交通管制等。

    3.6 多播 multicast

    一点到多点的通信方式。

    3.7 JOSN(JavaScript Object Notation)

    JSON 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的 js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。层次结构简洁、清晰,易于人阅读和编写,同时也易于机器解析和生成,并能有效地提升网络传输效率。

    3.8 令牌 Token

    Token 是服务端生成的一串字符串,以用作客户端进行请求的一个令牌。当第一次登录后,服务器生成一个 Token,并将此 Token 返回给客户端,以后客户端只需带上 Token 来请求数据即可,无需再次带上用户名和密码。

    3.9 AppKey

    AppKey 简称 API 接口验证序号,用于验证 API 接入合法性。

    3.10 消息摘要算法 Message-Digest Algorithm

    消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。

    3.11 盐 Salt

    Salt 是由伪随机数生成器生成的随机数,是一种用于防御字典攻击的机制。

    4 交互对象

    交互对象为使用多播通信机制的各个独立运营的系统平台。对于某一事件,发布事件消息的系统平台称为发布平台,接收事件消息的系统平台称为接收平台。

    5 交互内容

    发布平台向接收平台发送可精确描述位置、状态和内容的各类交通信息。

    6 交互过程

    对于某一事件信息,系统平台经过融合分析判断后可分享给其他系统平台使用,该平台成为发布平台。在符合交互安全的要求下,该平台通过某种链路首次向接收平台传输符合数据格式规范的事件信息,信息类型标为首报;如该事件有新的进展,则发布平台继续向接收平台传输后续补充信息,信息类型标为续报;如发布平台监测或推算该事件已经结束或消散,则发布平台向接收平台传输事件结束信息,信息类型标为终报。如发布平台在该事件的有效时间内未传输终报信息,则由接收平台自行决定该事件状态。

    7 交换信息结构

    每个传输的数据包通常只包含一个事件单元,其结构包括传输的数据包报头和数据包业务体。
    image.png
    数据包报头,用于标识数据包的基本属性,包括数据包标识,发报时间,失效时间,事件标识,数据包类型,发布平台 key 和版本号等。
    image.png
    数据包业务体,用于传递交通信息的具体内容,其中包含信息相关空间位置和事件内容、道路拥堵变化等。
    image.png

    8 数据包业务体编制规则

    8.1 分类识别、逐渐细化

    在整个数据包业务体中,将事件和信息拆分为三个组成部分,包括描述空间信息的空间位置部分、描述事件内容信息的事件内容部分和可能因事件所导致的道路拥堵水平变化部分。其中空间位置部分具体描述了该事件发生地和影响的道路。事件内容部分主要使用事件分类代码、事件状态和详细内容来描述事件,事件分类代码将事件和信息进一步分为一级类别和二级类别,详细内容以简单的短语补充描述具体事件信息。

    8.2 组合描述

    空间位置、事件内容、道路拥堵水平变化这三个部分不一定在所有场景都必须出现,需要根据不同的事件类型处理,如单独发生拥堵不涉及交通事件的,则事件内容中代码和详细内容可省略,只保留状态和空间位置、道路拥堵水平即可;如该事故为诱因造成的道路拥堵水平变化,则都需要保留;在涉及气象灾害等非局部事件时只需传输空间位置中的行政区代码和实体标识,WKT 几何对象则无需传输;没有获得道路拥堵水平变化信息时则可不必体现。在交通地理实体分类和基本事件分类代码的覆盖范围内,传输的 WKT 几何对象需按照对应的地理实体标识选择相应点/线/面层类型。

    9 列表

    9.1 交通地理实体分类列表

    image.png

    9.2 事件状态分类列表

    除了静态交通服务信息以外,所有事件均会标定为三种状态:,1.预报,2.发生中,3.已恢复或排除。静态交通服务信息的状态在详情内容描述部分具体展开。
    image.png

    9.3 事件分类

    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    9.4 道路拥堵水平分级

    image.png

    10 数据传输规范

    10.1 总体规范

    交互内容格式应符合:
    a) 采用 JSON 数据格式;
    b) 一个信息含义的数据封装在一个 JSON 数据包;
    c) JSON 数据采用 UTF-8 编码字符集;
    d) JSON 数据包由数据包报头和数据包业务体构成。

    10.2 数据包报头部分

    报头以(head:{报头内容})为标识识别。
    image.png

    10.3 数据包业务体部分

    数据包业务体部分以(body:{ })标识识别,用于传递数据包的主体内容,其中包含有信息发布范围,交通事件位置和交通事件信息等。
    如没有特殊标识,以下出现的经纬度均使用 WGS84 坐标系进行转换后的 GCJ02 加密坐标。其主要描述路段中发生的交通事件,如交通事件发生在路口,涉及多条道路,则由多条数据包描述,每条数据包描述一条道路的位置和事件的影响。如交通事件发生在道路中,则必须要有 AffectedRoadGeometry,用来辅助传递事件发生的车道方向。WKT 几何对象在表示线层时其方向必须为道路行进方向。

    10.3.1 空间位置

    以(Location:{})标识描述精确事件发生的位置。
    image.png

    10.3.2 交通事件内容

    以(event:{})标识交通事件信息。
    image.png

    10.3.3 道路拥堵水平变化

    以(TrafficCongestionLevel:{})标识道路拥堵水平信息。
    image.png

    11 交互安全

    11.1 认证

    发布平台对接收平台的身份认证遵循如下过程:
    a) 接收平台通过调用接口请求方法,发起接口调用请求;
    b) 如发布平台对接口请求方当前的身份数据进行序列化并验证其身份合法,则认证通过,否则身份认证失败;
    c) 接收平台的身份验证通过后,发布平台方返回带签名的 Token 给接收平台;
    d) 接收平台将 Token 保存在本地,并跳转到建立连接之后的界面;
    e) 发布平台校验 Token 的有效性,有效则开放接口发布事件消息,无效(错误或过期)则不发布,并向接收平台发送相关提示信息。

    11.2 加密

    11.2.1 加密类型

    信息交互加密算法主要使用非对称加密算法。

    11.2.2 密钥存储

    发布平台为接收平台颁发 AppKey,同时生成一对密钥对(公钥和私钥),公钥为接收平台所拥有的 AppKey,并由接收平台存储,发布平台存储对应的私钥。

    11.2.3 加密过程

    发布平台向接收平台进行事件信息发布时,首先对接收平台身份信息、发布消息体做加解密处理。

    11.2.3.1 接收平台身份的加解密应符合如下过程

    a) 发布平台通过心跳机制判断接收平台的在离线状态,若在线,则对接收平台身份进行认证,接收平台以自己存储的 AppKey 作为公钥加密随机数,生成签名信息,加密用户身份信息,发送到发布平台;
    b) 发布平台通过查询存储的对应私钥,对用户身份信息进行解密,并校验认证是否通过。

    11.2.3.2 发布消息体的加解密应符合如下过程

    a) 发布平台采用消息摘要算法将 AppKey 加密时间盐值,加密传输数据包,同时生成会话密钥,作为对称密钥对加密数据包进行加密,并将盐值信息及加密后的消息一起发送给接收平台;
    b) 接收平台接收消息后,先解密会话密钥,用做对称密钥解密数据包,之后解密时间盐值,并用解密后盐值解密还原原始数据包。

    11.3 授权

    a) 发布平台方负责管理、维护接收平台的应用、接口以及对接收平台应用接口的授权。
    b) 只有将接口及接口提供的方法授权给接收平台使用时,接收平台的相关应用才可调用该接口的方法。
    c) 接收平台在集成、调用接口时,发布平台应告知接收平台该接口是否需要授权,若必须授权,则应告知接口的授权范围。

    附录 A

    (资料性附录)

    网联车辆平台间协同服务信息交互数据包示例 1

    (Point 类型事件类型)

    1. {
    2. "head": {
    3. "ID": "FC4CFF114C4ACEFA55A8DAD0AD5B76AC",
    4. "Timestamp": 1597979075,
    5. " FailureTime ": 1597982675,
    6. "eventID": "1yetbfktzyk9heu9",
    7. "Type": "firstReport",
    8. "Key": "didi",
    9. "Version": "1.0"
    10. },
    11. "body": {
    12. "location": {
    13. "DistrictID": 110100,
    14. "Roadtpye": "Relief Road",
    15. "EventGeometry": "POINT (116.3106637198548 39.924462960297433)",
    16. "AffectedRoadGeometry": "LINESTRING (116.31071916036103
    17. 39.924395910442968,116.3106903595725 39.924433170254645,116.3106637198548
    18. 39.924462960297433,116.31063059962253 39.924502290348471,116.3105798400876
    19. 39.924548189947075,116.31054707958413 39.924573389850138,116.31052260003798
    20. 39.924589590237474,116.31048984043389 39.924607500235993,116.31044736005765
    21. 39.924623699724009)"
    22. },
    23. "Event": {
    24. "class": "U",
    25. "Status": "Ongoing",
    26. "eventCode": 113,
    27. "Content": "蓝色车辆发生抛锚,建议绕行",
    28. "Attachment": "https://www.didiyun.com/xxxxx/23232.jpg"
    29. },
    30. "TrafficCongestionLevelfield": {
    31. "Code": "B"
    32. }
    33. } }

    网联车辆平台间协同服务信息交互数据包示例 2

    (Line 类型事件类型)

    1. {
    2. "head": {
    3. "ID": "FC4CFF114C4ACEFA55A8DAD0AD5B98AC",
    4. "Timestamp": 1597979075,
    5. " FailureTime ": 1597982675,
    6. "eventID": "1yetbfktzyk9h3u9",
    7. "Type": "firstReport",
    8. "Key": "didi",
    9. "Version": "1.0"
    10. },
    11. "body": {
    12. "location": {
    13. "DistrictID": 110100,
    14. "Roadtpye": "Relief Road",
    15. " EventGeometry ": "LINESTRING (116.31071916036103
    16. 39.924395910442968,116.3106903595725 39.924433170254645,116.3106637198548
    17. 39.924462960297433,116.31063059962253 39.924502290348471,116.3105798400876
    18. 39.924548189947075,116.31054707958413 39.924573389850138,116.31052260003798
    19. 39.924589590237474,116.31048984043389 39.924607500235993,116.31044736005765
    20. 39.924623699724009)"
    21. },
    22. "Event": {
    23. "class": "N",
    24. "Status": "Ongoing"
    25. },
    26. "TrafficCongestionLevelfield": {
    27. "Code": "B"
    28. }
    29. }