# 机场和无人车数据接口对接要求

## 第1章 位置数据接口

### 1.1 登录认证

1. 登录接口：<http://IP:端口/login>
2. 请求方式：post
3. 参数：username、password
4. 示例：<http://127.0.0.1:8080/login?username=XXXX&password=XXXX>
5、返回值 data 为返回的鉴权token，后续接口需要再header中携带，data所有的数据是一个token，不要截断
示例：{
    "status": 200,
    "msg": "登入成功",
    "data": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzI3ODMwOTAsInVzZXJuYW1lIjoiYWRtaW4ifQ.y9feEL_9NT8UzED9NNkb0Ln6C-PBoufiSHWobWe5vWY"
}

### 1.2 航空器位置数据接入

数据来源：接入并转发从空管接收到的融合数据

1. 接口地址：<http://IP:端口/openApi/getCurrentFlightPositions>

2. 请求方式：get，需要在 Header 中携带认证信息，字段名为 Authorization，值为认证接口返回的token

3. 返回格式：以 JSON 格式返回数据，一次请求返回List集合对象

4. 数据结构：

| 序号 | 字段 | 描述 | 字段类型 | 是否必填 |
|-----|------|------|----------|----------|
| 1 | flightNo | 航班号 | String | 是 |
| 2 | longitude | 经度 | double | 是 |
| 3 | latitude | 纬度 | double | 是 |
| 4 | time | 时间戳（UTC 时间） | long | 是 |

### 1.3 车辆位置数据接入

数据来源：仅传递目前机场已接入的车辆位置数据

1. 接口地址：<http://IP:端口/openApi/getCurrentVehiclePositions>

2. 请求方式：get，需要在 Header 中携带认证信息，字段名为 Authorization，值为认证接口返回的token

3. 返回格式：以 JSON 格式返回数据，一次请求返回List集合对象

4. 数据结构：

| 序号 | 字段 | 描述 | 字段类型 | 是否必填 |
|-----|------|------|----------|----------|
| 1 | vehicleNo | 车牌号 | String | 是 |
| 2 | longitude | 经度 | double | 是 |
| 3 | latitude | 纬度 | double | 是 |
| 4 | time | 时间戳 |  long | 是 |

## 第2章 无人车控制接口

### 2.1 无人车控制指令

2.1.1 接口地址: <http://127.0.0.1:31140/api/VehicleCommandInfo>

2.1.2 请求方法：POST

2.1.3 请求参数：

| 字段名称 | 类型 | 是否必填 | 说明 |
|---------|------|----------|------|
| transId | string | 是 | 消息唯一 id，消息的唯一标识符 |
| timestamp | long | 是 | 时间戳 |
| vehicleID | string | 是 | 车辆 ID |
| commandType | string | 是 | 指令类型：ALERT：告警指令，SIGNAL：信号灯指令，WARNING：预警指令，RESUME：恢复指令 |
| commandReason | string | 是 | 指令原因：TRAFFIC_LIGHT：红绿灯控制，AIRCRAFT_CROSSING：航空器交叉，SPECIAL_VEHICLE：特勤车辆，AIRCRAFT_PUSH：航空器推出，RESUME_TRAFFIC：恢复通行 |
| signalState | string | 否 | 信号灯状态（仅当 commandType 为 SIGNAL 时有效）RED：红灯，GREEN：绿灯，YELLOW：黄灯 |
| intersectionId | string | 否 | 路口 ID（仅当 commandType 为 SIGNAL 时有效） |
| latitude | double | 是 | 目标位置纬度（路口/航空器/特勤车） |
| longitude | double | 是 | 目标位置经度（路口/航空器/特勤车） |
| relativeSpeed | double | 否 | 相对速度（仅当 commandType 为 ALERT/WARNING 时有效） |
| relativeMotionX | double | 否 | 相对运动 X 分量（仅当 commandType 为 ALERT/WARNING 时有效） |
| relativeMotionY | double | 否 | 相对运动 Y 分量（仅当 commandType 为 ALERT/WARNING 时有效） |
| minDistance | double | 否 | 最小距离（仅当 commandType 为 ALERT/WARNING 时有效） |

示例：

requestData:
{
  "messageUniqueId": "68f79d1a-e27f-11ed-b28c-2cf05d9c2649",
  "timestamp": 1736175610000,
  "vehicleID": "A001",
  "commandType": "SIGNAL",
  "commandReason": "TRAFFIC_LIGHT",
  "signalState":"RED",
  "intersectionId":"002",
  "latitude": 343.23,
  "longitude": 343.23,
  "relativeSpeed": 3,
  "relativeMotionX": 2002.12,
  "relativeMotionY":100.12,
  "minDistance":10.5
}

返回值：

| 字段名 | 类型 | 是否必须 | 描述 |
|---------|------|----------|------|
| transId | string | 是 | 消息唯一id，消息的唯一标识符与请求id一致 |
| timestamp | long | 是 | 时间戳 |
| code | int | 是 | 接口返回的状态码：200 请求成功：400 请求失败，并在msg内返回原因 |
| msg | string | 是 | 接口成功/失败的原因或者附加提示信息 |

示例：

responseData:
{
  "code": 200,
  "msg": "success",
  "transId": "68f79d1a-e27f-11ed-b28c-2cf05d9c2649",
  "timestamp": 1736175610
}

### 2.2 无人车位置上报

1. 接口地址: <http://127.0.0.1:31140/api/VehicleLocationInfo>

2. 请求方法：GET

3. 返回值（以 List 数据返回，一次请求返回集合对象）：

| 字段名称 | 类型 | 是否必填 | 说明 |
|---------|------|----------|------|
| transId | string | 是 | 消息唯一 id，消息的唯一标识符 |
| timestamp | long | 是 | 时间戳（UTC 时间，单位：毫秒） |
| vehicleID | string | 是 | 车辆 ID |
| latitude | double | 是 | 纬度 |
| longitude | double | 是 | 经度 |
| speed | double | 是 | 速度（单位：m/s） |
| direction | double | 是 | 车头航向角，正东为 0 度（弧度） |

示例：

requestData:
[
{
  "transId": "68f79d1a-e27f-11ed-b28c-2cf05d9c2649",
  "timestamp": 1736175610000,
  "vehicleID": "AT001",
  "latitude": 123.112,
  "longitude": 78.331,
  "speed": 3.2,
  "direction": 1.57
}
]

### 2.3 无人车状态上报

1. 接口地址: <http://127.0.0.1:31140/api/VehicleStateInfo>

2. 请求方法：POST

3. 请求参数：

| 字段名称 | 类型 | 是否必填 | 说明 |
|---------|------|----------|------|
| transId | string | 是 | 消息唯一 id，消息的唯一标识符 |
| timestamp | long | 是 | 时间戳（UTC 时间，单位：毫秒） |
| vehicleID | string | 是 | 车辆 ID |
| isSingle | boolean | 是 | True：单个车辆，False：所有车辆 |

示例：

    requestData:
    {
    "transId": "68f79d1a-e27f-11ed-b28c-2cf05d9c2649",
    "timestamp": 1736175610000,
    "vehicleID": "AT001",
    "isSingle": true
    }

4. 返回值（以 List 数据返回，一次请求返回集合对象）：

| 字段名称 | 类型 | 是否必填 | 说明 |
|---------|------|----------|------|
| transId | string | 是 | 消息唯一 id，消息的唯一标识符 |
| timestamp | long | 是 | 时间戳（UTC 时间，单位：毫秒） |
| vehicleID | string | 是 | 车辆 ID |
| loginState | boolean | 是 | 登录状态：True：登录，False：未登录 |
| faultInfo | list | 是 | 故障信息，以列表返回，可能存在多个 |
| activeSafety | boolean | 是 | 车辆最小风险策略触发（主动安全）：True：触发，False：未触发 |
| RC | boolean | 是 | 被接管或干预相关信息，是否被远控RemoteControl，True：车辆在遥控器远控模式，False：车辆处于自动驾驶模式 |
| Command | int | 是 | 接收的远程指令信息，0：恢复，1：急停，2：缓停 |
| airportInfo | list | 否 | 机场特殊要求的其他信息 |
| vehicleMode | int | 是 | 无人设备控制模式（底盘控制模式），1:手动（司机驾驶），2:自动，3:遥控器，4:远程，5：故障等待 |
| gearState | int | 是 | 车辆当前档位，1:N，2:D，3:P，4:R, 5: 未知 |
| chassisReady | boolean | 是 | 底盘是否准备就绪，True：车辆发控制指令就可以走，false: 其他 |
| collisionStatus | boolean | 否 | 防撞梁是否触发，true：触发，false：未触发 |
| clearance | int | 是 | 0：关闭，1：开启（示廓灯） |
| turnSignalStstus | int | 是 | 转向灯状态，0：off , 1 : trun left , 2 : trun right, 3: 双闪 |
| pointCloud | list | 否 | 点云数据字节流，每个点的长度，现在是12，每个坐标为float，长度4|

示例：

responseData:
[
  {
    "transId": "68f79d1a-e27f-11ed-b28c-2cf05d9c2649",
    "timestamp": 1736175610000,
    "vehicleID": "AT001",
    "loginStatus":true,
    "faultInfo":[],
    "activeSafety":false,
    "RC":false,
    "Command":0,
    "airportInfo":[],
    "vehicleMode": 2,
    "gearState": 2,
    "chassisRaedy":true,
    "collisionStatus":false,
    "clearance":0,
    "turnSignalStstus":0,
    "pointCloud":[]
  }
]
