车流仿真服务

可永久使用
三个月内免费在线技术支持
三个月内免费版本升级
价格¥7999
立即下载

仿真首页

简介

路网车辆仿真产品是是一款先进的交通模拟工具,专为城市规划者、交通工程师和研究人员等用户提供强大的分析和预测能力。该产品通过全面、精准、高效的模拟,帮助用户深入理解和优化复杂的交通系统。

1. 产品特性

特性1:支持主流的路网

支持上传两种主流的路网文件格式——OpenDRIVE(xodr)和OpenStreetMap(osm)。OpenDRIVE是一种专门用于描述道路网络的标准化文件格式,能够详细记录道路的几何形状、车道布局、交通标志和信号等信息,而OpenStreetMap则是全球最大的用户生成地理信息数据库,包含了丰富的路网数据。通过兼容这两种格式,我们的产品能够灵活适应各种来源的路网数据,从而在不同交通需求环境下实现精准的路网车辆仿真。

特性2:多样的仿真需求模拟

在交通需求模拟方面,我们的产品提供了两种模式供用户选择:随机模式和OD(起始点)模式。随机模式下,系统会根据预设的参数和概率分布自动生成交通需求,适用于对整体交通状况进行宏观模拟和分析。而OD模式则允许用户根据实际的起始点数据来定制交通需求,从而实现更精确、更具针对性的模拟。

特性3:实时模拟

在仿真数据输出方面,我们的产品提供了两种方式供用户选择:实时输出和一次性输出仿真数据。实时输出数据时,通过WebSocket技术,我们的产品能够在模拟过程中实时地将仿真数据推送到用户的界面,使用户能够即时观察到交通流量、车辆速度、拥堵情况等动态变化。一次性输出数据,通过调用API接口,让用户能够一次性获取所有的仿真数据,这种功能对于需要深度分析和二次处理数据的用户来说尤其便利。

特性4:丰富的车辆行驶数据

仿真输出数据结构方面,包含当前仿真时间点,路网上车辆统计信息(已加载车辆数、已出发车辆数、已到达车辆数、运行中车辆数、平均车速),车辆详细信息(每一辆车当前车速、车位置坐标、所在车道ID、角度、车型号、车颜色)等。

2. 使用指导

实现一个仿真操作主要有三步,见下图。

3. 仿真需求

3.1 静态需求

  1. 车流量

    定义在一段时间内,在仿真场景中运行的车辆数量

  2. 车辆配置参数

    车辆类型配置,主要是定义车辆的一些属性。目前支持自定义,车型号(小汽车、卡车等)、最大车速(单位m/s)、加速度、减速度、车长、车距、车颜色、车型占比等参数

  3. 仿真时长

    指定仿真时长,在实时仿真模式,可配置每一秒模拟步长,可实现针对仿真车流的快进、慢放等功能

  4. OD模式

    用于指定车流出发路口与目标路口

  5. 随机模式

    随机模型由系统根据路网中逻辑互通的路口,随机生成车流流量

3.2 动态需求

  1. 封闭路段

    可通过在运行时或启动前,配置需要封闭的车道,车道封闭后,车流会自动避开封闭车道

  2. 解封路段

    可通过在运行时,对已封闭的车道进行解封

  3. 动态增加车辆

    可在运行时,对指定道路,一次或者持续增加车辆

  4. 车辆变道

    可在运行时,控制指定车辆变道

  5. 车辆变更目的地

    可在运行时,控制指定车辆变更行驶目的地

  6. 车道限速

    可在运行时,限制指定车道最大允许车速

  7. 变更仿真时间步长

    可在运行时,随时控制仿真时间步长

4.部署和应用

4.1 安装环境

1、系统运行环境

windows系统,win10+

2、安装python

要求 python 3,推荐版本python 3.10.6

3、安装 sumo

将环境变量SUMO_HOME设置为sumo安装的基本目录。这个目录包含bin和tools文件夹。

注意: 使用msi包安装,一般会有两个选项:自动配置环境变量SUMO_HOME,自动将sumo工具配置到python安装目录下的PYTHONPATH环境变量中

手动将环境变量SUMO_HOME设置为sumo安装的基本目录。这个目录包含bin和tools文件夹。

注意: 请注意确保在PYTHONPATH环境变量中添加"/your/path/to/sumo/tools"。

4、安装mysql数据库

服务需要依赖mysql数据库,使用mysql安装包、docker镜像安装或其它方式安装均可。

4.2 运行脚本

4.2.1 初始化数据库

安装好mysql后,新建数据库名称traci

traci

配置数据库结构

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for demand_conf
-- ----------------------------
DROP TABLE IF EXISTS `demand_conf`;
CREATE TABLE `demand_conf`  (
  `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
  `mode` int(1) NOT NULL COMMENT '模式(1-od 2-randomtrips)',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  `time_conf_json` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ' 时间段配置json',
  `vehicle_conf_json` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '车辆配置json',
  `od_conf_json` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'od配置json',
  `randomtrips_conf_json` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'randomtrips配置json',
  PRIMARY KEY (`task_id`, `mode`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for net_conf
-- ----------------------------
DROP TABLE IF EXISTS `net_conf`;
CREATE TABLE `net_conf`  (
  `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  `net_file` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路网文件',
  `task_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务名称',
  PRIMARY KEY (`task_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

4.2.2 启动服务

1、可自定义配置

{
    "serverPort":8100,
    "dbconfig":{
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",
        "password": "enzo@123456",
        "db": "traci"
    },
    "websocketPublicDomainOnTestClientPage":"ws://127.0.0.1:8100",
    "fastApiPublicDomainOnTestClientPage":"http://127.0.0.1:8100",
    "basedir": "D:\\simulateTaskFiles"
}

config.json配置详细说明如下:

字段 字段说明 是否必须 默认值
serverPort 自定义服务端口 可选 8100
dbconfig 自定义mysql数据库配置 可选 {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "enzo@123456",
"db": "traci"
}
websocketPublicDomainOnTestClientPage 内置websocket测试页面 ws连接url 可选 ws://127.0.0.1:8100
fastApiPublicDomainOnTestClientPage 内置websocket测试页面 api访问url 可选 http://127.0.0.1:8100
basedir 自定义服务端文件保存目录 可选 D:\simulateTaskFiles

2、安装依赖

pip install -r requirements.txt

3、启动服务

python main.pyc

4.3 测试步骤

4.3.1 上传opendriver/osm格式的路网文件

例如,发送http请求格式如下:

url:
POST http://127.0.0.1:8100/netConvert

请求:
Content-Type: multipart/form-data

响应:
{
   "code": 200,
   "data": {
       "task_id": "9a5a61d8-d89d-469f-90f4-6498c46592db"
   },
   "msg": null
}

4.3.2 配置仿真需求

如使用od模式创建交通需求,则配置参数(仿真时间配置、车辆配置、od配置),后台默认mode=1 如使用随机模式创建交通需求,则配置参数(仿真时间配置、车辆配置、随机配置),后台默认mode=2 说明:两种模式可同时创建

od模式:仿真时间配置、车辆配置为非必传,od配置为必传

例如,发送http请求格式如下:

url:
POST http://127.0.0.1:8100/odDemandGenerate

请求:
Content-Type: application/json

{
    "task_id":"9a5a61d8-d89d-469f-90f4-6498c46592db",
    "time_conf_json":"{\"begin\":0,\"end\":100,\"stepLength\":0.5}",
    "vehicle_conf_json":"{\"vtype\":[{\"vClass\":\"passenger\",\"probability\":\"0.5\",\"maxSpeed\":\"34\",\"color\":\"yellow\"},{\"vClass\":\"truck\",\"probability\":\"0.5\",\"maxSpeed\":\"34\",\"color\":\"green\"}]}",
    "od_conf_json":"{\"odBegin\":0,\"odEnd\":500,\"odMapping\":[{\"from\":\"2\",\"to\":\"0\",\"count\":\"2000\"},{\"from\":\"11\",\"to\":\"-24\",\"count\":\"2000\"}]}"
}

响应:
{
    "code": 200,
    "data": true,
    "msg": null
}

随机模式:仿真时间配置、车辆配置、随机配置为非必传

例如,发送http请求格式如下:

url:
POST http://127.0.0.1:8100/randomtripsDemandGenerate

请求:
Content-Type: application/json

{
    "task_id":"9a5a61d8-d89d-469f-90f4-6498c46592db",
    "time_conf_json":"{\"begin\":0,\"end\":100,\"stepLength\":0.5}",
    "vehicle_conf_json":"{\"vtype\":[{\"vClass\":\"passenger\",\"probability\":\"0.5\",\"maxSpeed\":\"34\",\"color\":\"yellow\"},{\"vClass\":\"truck\",\"probability\":\"0.5\",\"maxSpeed\":\"34\",\"color\":\"green\"}]}",
    "randomtrips_conf_json":"{\"period\":1,\"random\":true,\"randomDepart\":true}"
}

响应:
{
    "code": 200,
    "data": true,
    "msg": null
}

4.3.3 启动仿真

1、websocket连接方式

websocket连接方式可对仿真数据进行实时输出。

在线访问测试体验地址为:websocket 在线访问测试,或者启动本地仿真服务后,访问本地测试地址: http://127.0.0.1:8100/testClient

websocket支持的命令,见【5.3.2、客户端向服务端发送仿真控制命令列表】详细说明

客户端创建websocket连接格式如下:

连接服务端点:
ws://127.0.0.1:8100/ws/${task_id}/${mode}

请求:
task_id=9a5a61d8-d89d-469f-90f4-6498c46592db
mode=1

响应:
{
    "msgtype":"simulateData",
    "data":{
        "taskkey":"9a5a61d8-d89d-469f-90f4-6498c46592db_1",
        "time":0.5,
        "loadedNumber":2,
        "departedNumber":2,
        "arrivedNumber":0,
        "runningNumber":2,
        "avgSpeed":18.39763,
        "data":[
            {
                "vehicle_id":"0.0",
                "speed":17.437,
                "x":1516.22578,
                "y":482.34661,
                "z":0,
                "lane":"22_0",
                "angle":303.2581865480051,
                "vclass":"passenger",
                "color":[
                    255,
                    255,
                    0,
                    255
                ]
            },
            {
                "vehicle_id":"1.0",
                "speed":19.359,
                "x":-0.44943,
                "y":1285.53668,
                "z":0,
                "lane":"16_0",
                "angle":122.78335187281229,
                "vclass":"passenger",
                "color":[
                    255,
                    255,
                    0,
                    255
                ]
            }
        ]
    }
}

websocket客户端连接服务端,参考html脚本代码:

<!DOCTYPE html>
<html>
    <head>
        <title>Chat</title>
    </head>
    <body>
        <h1><span>task_id和mode获取说明</span></h1>
        <p>
            <table>
                <tr><td>api接口地址:http://127.0.0.1:8100/docs</td></tr>
                <tr><td>1、使用转换路网文件api接口,上传xodr/osm文件,响应中可获取task_id</td></tr>
                <tr><td>2、使用配置交通需求api接口,传入参数task_id,</td></tr>
                <tr><td>&nbsp;&nbsp;&nbsp;如使用od模式创建交通需求,则配置参数(仿真时间配置、车辆配置、od配置),后台默认mode=1</td></tr>
                <tr><td>&nbsp;&nbsp;&nbsp;如使用随机模式创建交通需求,则配置参数(仿真时间配置、车辆配置、随机配置),后台默认mode=2</td></tr>
                <tr><td>&nbsp;&nbsp;&nbsp;说明:两种模式可同时创建</td></tr>
                <tr><td>3、使用查询交通需求配置api接口,可获取详细交通需求信息</td></tr>
            </table>
        </p>
        <h1>WebSocket Chat <span id="ws-id"></span></h1>
        <h2>注意: <span style='color:red'>请先开启一个指定task_id和mode的websocket连接,再发送仿真命令消息</span></h2>
        <h3><span>第一步:创建websocket连接</span></h3>
        <p>
            <table>
            <tr><td>例如</td></tr>
            <tr><td>task_id数据:9a5a61d8-d89d-469f-90f4-6498c46592db</td></tr>
            <tr><td>mode数据:1</td></tr>
            </table>
        </p>
        <form action="" onsubmit="startWebsocketConnect(event)">
            your task_id:
            <input type="text" id="messageText2" autocomplete="off"/>
            your mode:
            <input type="text" id="messageText3" autocomplete="off"/>
            <button id = "b1">start websocket connect</button>
        </form>
        <h3><span>第二步:发送仿真命令消息(开启、暂停、恢复、关闭)</span></h3>
        <p>
            <table>
            <tr><td>例如:</td></tr>
            <tr><td>开启命令:{"command":"start"}</td></tr>
            <tr><td>暂停命令:{"command":"stop"}</td></tr>
            <tr><td>恢复命令:{"command":"recover"}</td></tr>
            <tr><td>关闭命令:{"command":"close"}</td></tr>
            <tr><td>封闭车道命令:{"command":"closeLane","closelanes":["1_0"]}</td></tr>
            <tr><td>解封车道命令:{"command":"uncloseLane","uncloselanes":["1_0"]}</td></tr>
            <tr><td>变更仿真时间步长命令:{"command":"changeParam","stepLength":0.1}</td></tr>
            <tr><td>动态增加车辆命令:{"command":"addVehicle","vehicleData":[{"edges":[22,21],"num":10,"addType":"once"}]}</td></tr>
            <tr><td>车辆变道命令:{"command":"changeLane","vehicleData":[{"vehicleId":"0.0","laneIndex":1}]}</td></tr>
            <tr><td>车辆变更目的地命令:{"command":"changeTarget","vehicleData":[{"vehicleId":"0.0","edge":"-23"}]}</td></tr>
            <tr><td>车道限速命令:{"command":"limitLaneSpeed","laneSpeedData":[{"laneId":"1_0","maxSpeed":"5"},{"laneId":"1_1","maxSpeed":"5"},{"laneId":"1_2","maxSpeed":"5"}]}</td></tr>
            </table>
        </p>
        <form action="" onsubmit="sendMessage(event)">
            your command:
            <input type="text" id="messageText" autocomplete="off"/>
            <button>send msg</button>
        </form>
        <ul id='messages'>
        </ul>
        <script>
            var client_id = Date.now()
            document.querySelector("#ws-id").textContent = client_id;
            var ws;
            function startWebsocketConnect(event){
                var input2 = document.getElementById("messageText2")
                var input3 = document.getElementById("messageText3")
                var b1 = document.getElementById("b1")
                console.log(input2.value)
                console.log(input3.value)
                ws = new WebSocket(`ws://localhost:8100/ws/${input2.value}/${input3.value}`);
                ws.onmessage = function(event) {
                    var messages = document.getElementById('messages')
                    var message = document.createElement('li')
                    var content = document.createTextNode(event.data)
                    message.appendChild(content)
                    messages.appendChild(message)
                };
                input2.disabled = true;
                input3.disabled = true;
                b1.disabled = true;
                event.preventDefault()
            }
            function sendMessage(event) {
                var input = document.getElementById("messageText")
                ws.send(input.value)
                input.value = ''
                event.preventDefault()
            }
        </script>
    </body>
</html>

2、http接口调用方式

http接口启动仿真,仿真结果数据一次性输出到响应中。需要注意,如果仿真时间区间设置较长或车流量设置较大,响应结果数据会很大,接口响应需要花费很长时间。发送http请求格式如下:

url:
GET http://127.0.0.1:8100/getSimulateDataOnce?task_id=9a5a61d8-d89d-469f-90f4-6498c46592db&mode=2&renew=1

请求:
task_id=9a5a61d8-d89d-469f-90f4-6498c46592db&mode=2&renew=1

响应:
{
    "code": 200,
    "data": [
        {
            "vehicle_id": "0",
            "data": [
                {
                    "vehicle_id": "0",
                    "speed": 0.0,
                    "x": 1514.46993,
                    "y": 483.49816,
                    "z": 0.0,
                    "lane": "22_0",
                    "angle": 303.25818654800537,
                    "vclass": "truck",
                    "color": [
                        255,
                        255,
                        0,
                        255
                    ],
                    "time": 1.5
                },
                ...
            ]
        }
        ...
    ],
    "msg": null
}

4.4 使用工具查看道路id和车道id的说明

成功安装sumo软件,并配置SUMO_HOME环境变量后,使用netedit.exe工具可以查看转换后路网文件。先打开windos系统cmd控制台,再输入打开路网文件命令 netedit net.xml,net.xml为使用接口【5.1.2.下载转换后路网文件】导出的net.xml文件。凡是数据服务接口中涉及到需要指定道路id(edge_id)或者车道id(lane_id),均需要使用此种方式查找

打开文件后显示如下

打开net.xml视图

查看道路edge_id方法

道路ID

查看车道lane_id方法

车道ID

5. 数据服务接口

5.1 路网管理

5.1.1.上传路网文件(转换)

接口地址:/netConvert

请求方式:POST

请求数据类型:multipart/form-data

响应数据类型:*/*

接口描述:将osm或xodr文件转成路网文件

请求示例:

file:(binary)
task_name:str

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
file osm或xodr文件 true file
task_name 任务名称 false string

响应参数:

参数名称 参数说明 类型 schema
code 响应码 string
data 响应参数 object
  task_id 任务ID integer
msg 响应消息 string

响应示例:

{
    "code": 200,
    "data": {
        "task_id": "9b9e1fbb-8848-47c2-9457-57df1d183260"
    },
    "msg": null
}

5.1.2.下载转换后路网文件

接口地址:/getNet/{task_id}

请求方式:GET

请求数据类型:

响应数据类型:*/*

接口描述:获取转换后的路网xml文件

请求示例:

task_id=9a5a61d8-d89d-469f-90f4-6498c46592db

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
task_id 任务ID path true string

响应参数:

xml格式文件流

响应示例:

<?xml version="1.0" encoding="UTF-8"?>
  <!-- generated on 2023-12-21 20:38:57 by Eclipse SUMO netconvert Version 1.19.0
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/netconvertConfiguration.xsd">
    <input>
      <opendrive-files value="D:\simulateTaskFiles\9a5a61d8-d89d-469f-90f4-6498c46592db\origin.xodr"/>
    </input>
    <output>
      <output-file value="D:\simulateTaskFiles\9a5a61d8-d89d-469f-90f4-6498c46592db\net.xml"/>
    </output>
    <junctions>
      <no-turnarounds.except-deadend value="true"/>
    </junctions>
  </configuration>
  
-->


  <net version="1.16" junctionCornerDetail="5" rectangularLaneCut="true" limitTurnSpeed="5.50" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/net_file.xsd">
    <location netOffset="749.29,743.61" convBoundary="0.00,0.00,1515.69,1304.54" origBoundary="0.000000,0.000000,0.000000,0.000000" projParameter="+proj=tmerc +lat_0=23.63212998122232 +lon_0=116.3125251081986 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m  +vunits=m +no_defs "/>
    <type id="driving" priority="1" speed="13.89" disallow="pedestrian tram rail_urban rail rail_electric rail_fast ship" width="3.65"/>
    <edge id=":105_0" function="internal">
      <lane id=":105_0_0" index="0" disallow="pedestrian tram rail_urban rail rail_electric rail_fast ship" speed="17.88" length="38.30" width="3.50" shape="1430.36,548.22 1424.91,552.03 1415.82,557.46 1405.85,563.30 1397.78,568.32"/>
 ...

5.1.3.查询所有路网文件

接口地址:/getTaskConfs

请求方式:GET

请求数据类型:

响应数据类型:*/*

接口描述:获取全部的路网文件和仿真需求配置

请求示例:

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema

响应参数:

参数名称 参数说明 类型 schema
code 响应码 string
data 响应参数 object数组
 net_conf 路网数据 object
  task_id 任务ID string
  task_name 任务名称 string
  create_time 创建时间 string
 demand_conf 交通需求数据 string
  task_id 任务ID string
  mode 任务模式 1-od 2-随机 string
  create_time 创建时间 string
  update_time 修改时间 string
  time_conf_json 仿真时间配置参数,参考5.2.2详细字段说明
  vehicle_conf_json 车辆配置参数,参考5.2.2详细字段说明
  od_conf_json od配置参数,参考5.2.2详细字段说明
  randomtrips_conf_json 随机配置参数,参考5.2.3详细字段说明
msg 响应消息 string

响应示例:

{
  "code": 200,
  "data": [{
    "net_conf": {
      "task_id": "9a5a61d8-d89d-469f-90f4-6498c46592db",
      "create_time": "2023-12-21T20:38:57",
      "update_time": null,
      "net_file": "D:\\simulateTaskFiles\\9a5a61d8-d89d-469f-90f4-6498c46592db\\net.xml",
      "task_name": "demo-3-阶段"
    },
    "demand_conf": [
      {
        "task_id": "9a5a61d8-d89d-469f-90f4-6498c46592db",
        "mode": 1,
        "create_time": "2023-12-21T20:41:26",
        "update_time": "2023-12-29T15:13:14",
        "time_conf_json": "{\"begin\":0,\"end\":400,\"stepLength\":0.01}",
        "vehicle_conf_json": "{\"vType\":[{\"vClass\":\"passenger\",\"probability\":0,\"maSpeed\":34,\"color\":\"yellow\"},{\"vClass\":\"truck\",\"probability\":1,\"maSpeed\":34,\"color\":\"yellow\"}]}",
        "od_conf_json": "{\"odBegin\":0,\"odEnd\":380,\"odMapping\":[{\"from\":\"22\",\"to\":\"21\",\"count\":500},{\"from\":\"16\",\"to\":\"5\",\"count\":500}]}",
        "randomtrips_conf_json": null
      }
    ]
  }],
  "msg": null
}

5.1.4.根据地理坐标定位附近的道路

接口地址:/getNetEdgeByGeo

请求方式:GET

请求数据类型:

响应数据类型:*/*

接口描述:根据地理坐标定位附近的道路

请求示例:

task_id=9a5a61d8-d89d-469f-90f4-6498c46592db&lon=116.30517725232666&lat=23.63702291904673

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
task_id 任务ID query true string
lon lon或者x,由参数lonLatIsXy决定 query true float
lat lat或者y,由参数lonLatIsXy决定 query true float
radius 指定半径范围内的道路,默认10.0米范围内 query false float
lonLatIsXy lon,lat是否表示x,y,默认false query false bool

响应参数:

参数名称 参数说明 类型 schema
code 响应码 string
data 响应参数 object
id 道路ID,即edgeId string
  from 起始节点的id string
  to 结束的节点的id string
msg 响应消息 string

响应示例:

{
  "code": 200,
  "data": {
    "id": "16",
    "from": "16.end",
    "to": "98"
  },
  "msg": null
}

5.2 车流仿真需求配置

5.2.1.查询指定路网仿真需求

接口地址:/getTaskConf

请求方式:GET

请求数据类型:

响应数据类型:*/*

接口描述:获取指定任务的路网和交通需求配置

请求示例:

task_id=9a5a61d8-d89d-469f-90f4-6498c46592db

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
task_id 任务ID query true string

响应参数:

参数名称 参数说明 类型 schema
code 响应码 string
data 响应参数 object
 net_conf 路网数据 object
  task_id 任务ID string
  task_name 任务名称 string
  create_time 创建时间 string
 demand_conf 交通需求数据 string
  task_id 任务ID string
  mode 任务模式 1-od 2-随机 string
  create_time 创建时间 string
  update_time 修改时间 string
  time_conf_json 仿真时间配置参数,参考5.2.2详细字段说明
  vehicle_conf_json 车辆配置参数,参考5.2.2详细字段说明
  od_conf_json od配置参数,参考5.2.2详细字段说明
  randomtrips_conf_json 随机配置参数,参考5.2.3详细字段说明
msg 响应消息 string

响应示例:

{
  "code": 200,
  "data": {
    "net_conf": {
      "task_id": "9a5a61d8-d89d-469f-90f4-6498c46592db",
      "create_time": "2023-12-21T20:38:57",
      "update_time": null,
      "net_file": "D:\\simulateTaskFiles\\9a5a61d8-d89d-469f-90f4-6498c46592db\\net.xml",
      "task_name": "demo-3-阶段"
    },
    "demand_conf": [
      {
        "task_id": "9a5a61d8-d89d-469f-90f4-6498c46592db",
        "mode": 1,
        "create_time": "2023-12-21T20:41:26",
        "update_time": "2023-12-29T15:13:14",
        "time_conf_json": "{\"begin\":0,\"end\":400,\"stepLength\":0.01}",
        "vehicle_conf_json": "{\"vType\":[{\"vClass\":\"passenger\",\"probability\":0,\"maSpeed\":34,\"color\":\"yellow\"},{\"vClass\":\"truck\",\"probability\":1,\"maSpeed\":34,\"color\":\"yellow\"}]}",
        "od_conf_json": "{\"odBegin\":0,\"odEnd\":380,\"odMapping\":[{\"from\":\"22\",\"to\":\"21\",\"count\":500},{\"from\":\"16\",\"to\":\"5\",\"count\":500}]}",
        "randomtrips_conf_json": null
      }
    ]
  },
  "msg": null
}

5.2.2.新增或更新仿真需求配置(OD模式)

接口地址:/odDemandGenerate

请求方式:POST

请求数据类型:application/json

响应数据类型:*/*

接口描述:通过配置道路起始点方式生成交通需求文件

请求示例:

{
"task_id": "9a5a61d8-d89d-469f-90f4-6498c46592db",
"time_conf_json": "{\"begin\":0,\"end\":100,\"stepLength\":0.5}",
"vehicle_conf_json": "{\"vtype\":[{\"vClass\":\"passenger\",\"probability\":\"0.5\",\"maxSpeed\":\"34\",\"color\":\"yellow\"},{\"vClass\":\"truck\",\"probability\":\"0.5\",\"maxSpeed\":\"34\",\"color\":\"green\"}]}",
"od_conf_json": "{\"odBegin\":0,\"odEnd\":500,\"odMapping\":[{\"from\":\"22\",\"to\":\"21\",\"count\":\"2\"},{\"from\":\"16\",\"to\":\"5\",\"count\":\"2\"}]}"
}

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
task_id 任务ID true string
time_conf_json 仿真时间配置参数,非必须,不传后台默认{"begin":0,"end":3600,"stepLength":1}。自定义则需要将下属的json对象转成字符串。 false string
  begin begin表示仿真开始时间,单位秒。 true int
  end end表示仿真结束时间,单位秒。 true int
  stepLength stepLength表示仿真启动后,每走一步的时间步长,单位秒。区间为[0.001~1],步长越小,仿真速度越慢。 true double
vehicle_conf_json 车辆配置参数,非必须,不传后台默认{"vtype":[{"vClass":"passenger","probability":"0.5","maxSpeed":"34","color":"yellow"},{"vClass":"truck","probability":"0.5","maxSpeed":"34","color":"green"}]}。自定义则需要将下属的json对象转成字符串。 false string
  vtype vtype表示车辆类型配置,可以有多个。 true object
    vClass vClass表示车辆具体类型(passenger:普通乘用车,truck:大货车)。 true string
    maxSpeed maxSpeed表示车辆最大速度,单位m/s。 true double
    color color表示车辆颜色。 true string
    probability probability表示该车型在车流中占比。 true double
od_conf_json od配置参数,必须。自定义则需要将下属的json对象转成字符串。 true string
  odBegin odBegin表示车流出发时间段中的开始时间 true int
  odEnd odEnd表示车流出发时间段中的结束时间 true int
  odMapping od映射关系 true object
    from 道路起点edge_id,需要从路网net.xml中获取 true string
    to 道路目的地edge_id,需要从路网net.xml中获取 true string
    count 车辆数 true int
  flowOutputProbability flowOutputProbability表示写概率流或者均匀分布流,true表示为概率流,false表示均匀分布流即车辆等间隔出发,默认false。 false boolean

响应参数:

参数名称 参数说明 类型 schema
code 响应码 string
data 响应参数 boolean
msg 响应消息 string

响应示例:

{
    "code": 200,
    "data": true,
    "msg": null
}

5.2.3.新增或更新仿真需求配置(随机模式)

接口地址:/randomtripsDemandGenerate

请求方式:POST

请求数据类型:application/json

响应数据类型:*/*

接口描述:通过配置道路起始点方式生成交通需求文件

请求示例:

{
"task_id": "9a5a61d8-d89d-469f-90f4-6498c46592db",
"time_conf_json": "{\"begin\":0,\"end\":100,\"stepLength\":0.5}",
"vehicle_conf_json": "{\"vtype\":[{\"vClass\":\"passenger\",\"probability\":\"0.5\",\"maxSpeed\":\"34\",\"color\":\"yellow\"},{\"vClass\":\"truck\",\"probability\":\"0.5\",\"maxSpeed\":\"34\",\"color\":\"green\"}]}",
"randomtrips_conf_json":"{\"period\":1,\"random\":true,\"randomDepart\":true}"
}

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
task_id 任务ID true string
time_conf_json 仿真时间配置参数,非必须,不传后台默认{"begin":0,"end":3600,"stepLength":1}。自定义则需要将下属的json对象转成字符串。 false string
  begin begin表示仿真开始时间,单位秒。 true int
  end end表示仿真结束时间,单位秒。 true int
  stepLength stepLength表示仿真启动后,每走一步的时间步长,单位秒。区间为[0.001~1],步长越小,仿真速度越慢。 true double
vehicle_conf_json 车辆配置参数,非必须,不传后台默认{"vtype":[{"vClass":"passenger","probability":"0.5","maxSpeed":"34","color":"yellow"},{"vClass":"truck","probability":"0.5","maxSpeed":"34","color":"green"}]}。自定义则需要将下属的json对象转成字符串。 false string
  vtype vtype表示车辆类型配置,可以有多个。 true object
    vClass vClass表示车辆具体类型(passenger:普通乘用小汽车,truck:大货车)。 true string
    maxSpeed maxSpeed表示车辆最大速度,单位m/s。 true double
    color color表示车辆颜色。 true string
    probability probability表示该车型在车流中占比。 true double
randomtrips_conf_json 随机配置参数,非必须,不传后台默认{"period":1,"random":false,"randomDepart":false}。自定义则需要将下属的json对象转成字符串。 false string
  period 车辆插入率, 默认1,值越小,插入的车辆数据越多。 false double
  random 是否真随机,默认false。真随机时则相同配置参数,每次生成的路线数据均不同 false boolean
  randomDepart 是否等间隔出发,默认true false boolean

响应参数:

参数名称 参数说明 类型 schema
code 响应码 string
data 响应参数 boolean
msg 响应消息 string

响应示例:

{
    "code": 200,
    "data": true,
    "msg": null
}

5.3 实时输出仿真数据流

5.3.1 websocket客户端连接端点

ws://{服务名}:{服务端口}/ws/${task_id}/${mode}

或者

ws://{服务名}:{服务端口}/ws/${task_id}/${mode}?loopByTime=false

参数说明:

参数名称 参数说明 是否必须 默认值
task_id 任务ID 必须
mode 任务模式 1-od 2-随机 必须
loopByTime 控制仿真循环结束的方式,结束时间到了才结束仿真,或者所有车辆都跑完行程才结束仿真。默认false,即所有车辆都跑完行程才结束仿真。 非必须 false

5.3.2 客户端向服务端发送仿真控制命令列表

websocket客户端可以在仿真期间,向服务端发送动态交互命令,改变正在运行的仿真任务状态。

仿真功能 webscoket支持输入命令参数 参数说明
开启仿真 {"command":"start"} 后台会启动一个仿真任务
暂停仿真 {"command":"stop"} 暂停正在运行的仿真任务
恢复仿真 {"command":"recover"} 恢复已经暂停的仿真任务
关闭仿真 {"command":"close"} 关闭已启动的仿真
变更仿真时间步长 {"command":"changeParam","stepLength":0.1} 仿真时间步长,默认为1秒采集一次,区间为[0.001~1],步长越小,仿真速度越慢。
封闭车道 {"command":"closeLane","closelanes":["1_0"]} closelanes:封闭车道lane_id列表,需从net.xml文件中获取
解封车道 {"command":"uncloseLane","uncloselanes":["1_0"]} uncloselanes:解封车道lane_id列表,需从net.xml文件中获取
动态增加车辆 {"command":"addVehicle","vehicleData":[{"edges":[22,21],"num":10,"addType":"once"}]} vehicleData:动态增加的车辆数据列表。edges:起点和目的地道路edge_id,据此生成行程路线,需从net.xml文件中获取。num:增加车辆数量。addType:增加车辆方式,once为增加一次,always为每个仿真步骤都会增加。
车辆变道 {"command":"changeTarget","vehicleData":[{"vehicleId":"0.0","edge":"-23"}]} vehicleData:动态改变的车辆数据列表。vehicleId:车辆ID,需从net.xml文件中获取。laneIndex: 要变更车道序号(从右侧车道开始顺序编号,0,1,2,...)。
车辆变更目的地 {"command":"changeTarget","vehicleData":[{"vehicleId":"0.0","edge":"-23"}]} vehicleData:动态改变的车辆数据列表。vehicleId:车辆ID,需从net.xml文件中获取。edge: 要变目的地的道路edge_id,需从net.xml文件中获取。
车道限速 {"command":"limitLaneSpeed","laneSpeedData":[{"laneId":"1_0","maxSpeed":"5"},{"laneId":"1_1","maxSpeed":"5"},{"laneId":"1_2","maxSpeed":"5"}]} laneSpeedData:动态限制车道速度数据列表。laneId:车道ID,需从net.xml文件中获取。maxSpeed:限制车道的最大速度。

5.2.3 websocket服务端推送的车辆行驶数据格式

websocket方式仿真时,服务端向客户端推送的响应数据示例:

{
    "msgtype":"simulateData",
    "data":{
        "taskkey":"9a5a61d8-d89d-469f-90f4-6498c46592db_1",
        "time":0.5,
        "loadedNumber":2,
        "departedNumber":2,
        "arrivedNumber":0,
        "runningNumber":2,
        "avgSpeed":18.39763,
        "data":[
            {
                "vehicle_id":"0.0",
                "speed":17.437,
                "x":1516.22578,
                "y":482.34661,
                "z":0,
                "lane":"22_0",
                "angle":303.2581865480051,
                "vclass":"passenger",
                "color":[
                    255,
                    255,
                    0,
                    255
                ]
            },
            {
                "vehicle_id":"1.0",
                "speed":19.359,
                "x":-0.44943,
                "y":1285.53668,
                "z":0,
                "lane":"16_0",
                "angle":122.78335187281229,
                "vclass":"passenger",
                "color":[
                    255,
                    255,
                    0,
                    255
                ]
            }
        ]
    }
}

websocket方式仿真时,服务端向客户端推送的响应数据参数说明

参数名称 参数说明 类型 schema
msgtype 消息类型 string
data 当前路网中每个仿真时间步长内,行驶车辆的数据集合 object数组
taskkey 任务id string
time 仿真时间点 string
loadedNumber 当前仿真时间点,路网中已加载的车辆总数 int
departedNumber 当前仿真时间点,路网中已出发的车辆总数 int
arrivedNumber 当前仿真时间点,路网中已到达的车辆总数 int
runningNumber 当前仿真时间点,路网中正在行驶的车辆总数 int
avgSpeed 当前仿真时间点,路网中平均车速,单位m/s double
data 当前仿真时间点,路网中车辆行驶数据列表 object数组
speed 车速,m/s double
x 平面x坐标。x,y,z:以米为单位的坐标(笛卡尔坐标) double
y 平面y坐标。x,y,z:以米为单位的坐标(笛卡尔坐标) double
z 平面z坐标。x,y,z:以米为单位的坐标(笛卡尔坐标) double
lane 车道lane_id string
angle 车辆的角度(以度为单位) double
vclass vClass表示车辆具体类型(passenger:普通乘用小汽车,truck:大货车)。 string
color 车颜色
msg 响应消息 string

5.4 一次性输出仿真数据流

接口地址:/getSimulateDataOnce

请求方式:GET

请求数据类型:

响应数据类型:*/*

接口描述:直接获取仿真所有结果数据

请求示例:

task_id=9a5a61d8-d89d-469f-90f4-6498c46592db

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
task_id 任务ID query true string
mode 任务模式 1-od 2-随机 query true int
renew 是否每次都重新执行仿真任务 0-不重新 1-重新。默认0,表示有历史数据直接返回 query false int
closelanes 关闭车道lane_id列表 query false string数组
loopByTime 控制仿真循环结束的方式,结束时间到了才结束仿真,或者所有车辆都跑完行程才结束仿真。默认false,即所有车辆都跑完行程才结束仿真。 query false bool

响应参数:

参数名称 参数说明 类型 schema
code 响应码 string
data 响应参数 object数组
 vehicle_id 车辆id string
 data 车辆行驶数据列表 object数组
  speed 车速,米每秒,m/s double
  x 平面x坐标。x,y,z:以米为单位的坐标(笛卡尔坐标) double
  y 平面y坐标。x,y,z:以米为单位的坐标(笛卡尔坐标) double
  z 平面z坐标。x,y,z:以米为单位的坐标(笛卡尔坐标) double
  lane 车道lane_id string
  angle 车辆的角度(以度为单位) double
  vclass vClass表示车辆具体类型(passenger:普通乘用小汽车,truck:大货车)。 string
  color 车颜色 string
  time 仿真时间点,单位秒 double
msg 响应消息 string

响应示例:

{
    "code": 200,
    "data": [
        {
            "vehicle_id": "0",
            "data": [
                {
                    "vehicle_id": "0",
                    "speed": 0.0,
                    "x": 1514.46993,
                    "y": 483.49816,
                    "z": 0.0,
                    "lane": "22_0",
                    "angle": 303.25818654800537,
                    "vclass": "truck",
                    "color": [
                        255,
                        255,
                        0,
                        255
                    ],
                    "time": 1.5
                },
                ...
            ]
        }
        ...
    ],
    "msg": null
}
车流仿真服务 - NSDT
联系客服