Whitemud Drive 高速公路交通数据集解析:从坐标校准到 SUMO 仿真接入实践

简介:这份加拿大Whitemud Drive高速公路数据集,面向交通工程、智慧高速与数据挖掘方向的研究者,可用于交通流预测、出行时间预测、短期需求预测、可变限速控制效果评估、瓶颈路段检测,以及天气对可变限速影响和高速公路通行能力等课题。压缩包共748个文件,以692个xls交通观测数据表为主体,辅以51张jpg车速时空分布图、1个xlsx汇总文件、2个m脚本及说明txt,便于直接开展数据分析和模型复现,整体大小138.42MB。数据集基于埃德蒙顿市Whitemud Drive主干道和闸道地感线圈采集的车流量、车速与车辆密度观测记录,并覆盖可变限速控制场景,时空粒度较细,适合本科生、研究生及科研人员作为实验数据或论文研究基础。目前已有2492人学习下载,是高速公路交通流分析和智能管控方向实用性较强的开源参考数据集。

1. 加拿大 Whitemud Drive 高速公路数据集:拿到手先别急着跑仿真

做交通流预测、信号灯配时优化或者自动驾驶仿真的人,最头疼的往往不是算法选型,而是没有一份真实、带信号配时、能对上坐标系的路网数据。这份 Whitemud Drive 高速公路数据集,正是从加拿大某城市一条贯穿市区的东西向快速路采集的真实交通数据包。它不像网上常见的抽象路网那样只有几何线条,而是把车道级轨迹、信号灯相位、检测器流量和高程信息都打包在了一起。拿到它能做的事很直接:在 SUMO 里复刻一条真实快速路、做交叉口排队估计、把单车轨迹回放成动画、甚至反向验证你自己的信号控制逻辑。适合的读者是正在做交通仿真课程的作业、搞毕设实验,或者准备某类智慧城市竞赛的从业者。但我要先说一个建议:先别急着把数据塞进仿真器,先把坐标系、车道命名和信号配时三个文件对齐,后面能少踩很多坑。

2. 数据集内部拆解:先搞清压缩包里有什么,再谈怎么用

2.1 文件分类与命名规律

解压这份 .rar 之后,典型的目录结构是这样组织的:几何文件、轨迹文件、信号文件、流量文件、文档文件五类分开存放。常见做法是英文主目录加编号,例如Road_Network/、Trajectory/、Signal_Timing/、Traffic_Count/、Docs/。每个子目录里都有配套的 README 或 .xml 元数据。

文件命名的规律基本是「路段编号 + 方向 + 日期时间戳」。比如WB_Lane2_20190703_0630.csv就是西行第 2 车道、2019 年 7 月 3 日 6 点 30 分的数据。这类命名在真实研究数据集里很常见,因为它能直接和路网几何文件的lane_id建立映射。有些文件会带dbl后缀,表示双环检测器数据;带signal后缀的则关联信号配时方案。下载后第一步应该把所有文件的表头和文件名列成一张映射表,否则后期处理会陷入「找不到字段含义」的泥潭。

我一般会用 Python 批量读取所有 CSV 的表头,确认时间和车道命名统一之后再做聚合分析。示例代码如下:

import os, pandas as pd data_root = "/path/to/Whitemud/" file_list = [] for root, dirs, files in os.walk(data_root): for f in files: if f.endswith(".csv"): file_list.append(os.path.join(root, f)) for fp in file_list[:10]: df = pd.read_csv(fp, nrows=5, encoding="utf-8-sig") print(os.path.basename(fp), list(df.columns))

这段代码的思路是只读前 5 行,快速确认每个文件的编码和列名,避免把 GBK 或 UTF-16 的文本直接读成乱码。参数说明:encoding="utf-8-sig"是为了兼容带 BOM 的文件;nrows=5控制读取行数,在文件很多时能明显减少内存压力。跑完这步,你就能看到某个轨迹文件里到底是time、vehicle_id、lane_id、speed这样的标准字段,还是混进了lat/lon坐标字段。

2.2 几何文件里的关键表:节点、路段、车道、检测器

几何文件通常包含四张表:节点表、路段表、车道表、检测器表。节点表给出的node_id和经纬度是整套数据的空间骨架。路段表记录道路等级、是否限速、双向车道数。车道表最容易被忽视——它除了lane_id和宽度外,还标记了转向类型和是否允许停车。

检测器表在这份数据里比较独特:它不是普通的路口线圈,而是安装在快速路主线和匝道上的环形线圈检测器,输出的是半小时聚合的流量、速度和占有率。这和许多欧洲数据集常用的感应线圈数据是同源的,因此处理经验可以迁移。建议先把检测器表里的det_id和路网里的edge_id做一次空间关联,画出布点图,这样后面验证仿真输出时才能快速定位偏差来自哪个断面。

3. 坐标系与高程口径:决定仿真能否对齐实地的第一道关

3.1 地理坐标系:用 WGS84 十进制度还是投影坐标?

拿到这份数据后,先要确认几何文件里的坐标字段是十进制度还是米制投影坐标。Whitemud Drive 数据集中,常见做法是节点和轨迹都存成十进制度 WGS84,同时文档里会给出投影到 UTM 区域的建议参数。这意味着直接拿经纬度画在地图上是没问题的,但放进 SUMO 这类需要米制坐标的仿真器之前,必须做一次坐标转换。

投影参数我一般用EPSG:326...这类 UTM 分区坐标系,因为它在城市尺度下的形变可以忽略。做转换用pyproj最方便:

from pyproj import Transformer transformer = Transformer.from_crs("EPSG:4326", "EPSG:32611", always_xy=True) lon, lat = -113.5, 53.5 x, y = transformer.transform(lon, lat) print(x, y)

逻辑说明:always_xy=True确保输入顺序是经度、纬度,而不是默认的纬度、经度,否则算出的坐标会直接飞到大洋彼岸。EPSG:32611对应北半球第 11 个 UTM 分区,如果文档写的是别的分区号就替换成对应代码。这一步做完,路网几何才能和后续的轨迹点套在同一张图里。

3.2 高程数据与纵断面:容易被忽略的坡度因素

很多人在做城市快速路仿真时完全忽略坡度和高程,但 Whitemud Drive 沿线有连续的高架段和地面段转换,高程变化会直接改变重型车的加速度表现。数据集里通常会提供一条按里程采样的高程曲线,或者一份基于 DEM 内插的高程点云。

实操时我会先把高程点匹配到路网上,再生成纵断面图。如果发现有连续超过 2% 的坡段,在 SUMO 里就必须给对应路段设置slope属性,否则仿真车辆的平均速度会在某些区间明显高于实测。需要注意:这份数据的高程来源很可能是地形模型内插,不是激光雷达点云直接量测,所以局部可能会有 1-2 米的误差,做严谨分析前最好用对照数据标定一次。

4. 把 Whitemud Drive 数据接入 SUMO 仿真:一条能跑的完整路径

4.1 从几何文件生成路网:用 netconvert 还是手工构建?

拿到几何文件后,进入仿真的第一步是把路网转成 SUMO 的.net.xml。这里有两类做法。简单路径:如果数据集里已经带有 OpenStreetMap 提取的.osm文件,可以直接用netconvert转换;高级路径:如果只有节点和路段表,需要用 Python 脚本生成 SUMO 的.edg.xml和.nod.xml。

常见做法是先用 OSM 文件跑通全流程,再用实测几何修正关键交叉口。因为 OSM 提取的拓扑在快速路主线上表现很稳,但在匝道入口、车道数变化处经常会缺少细节,而数据集的几何文件刚好能补上这部分。转换命令参考如下:

netconvert --osm-file whitemud.osm --output-file whitemud.net.xml \ --ramps.guess --ramps.set-right true \ --geometry.remove \ --tls.guess \ --speed.offset 3.6

参数含义分别是:自动识别匝道并设置为右侧汇入、删除冗余几何点、自动猜测信号灯位置、给限速值统一加 3.6 km/h 的修正量以匹配实测自由流速度。--ramps.guess的作用是让快速路匝道具备加速车道语义,否则汇入车辆会在路段起点直接停车。

转换完成后,用netedit打开检查一遍,重点看匝道与主线的汇入角度是否合理。如果netconvert把某些弧线段生成了锐角,后续微观仿真的换道模型就会频繁出现异常减速。

4.2 车流量加载与信号配时脚本

Whitemud Drive 数据集的流量文件是半小时聚合的,SUM0 里加载流量可以用两种方式:一种是把流量转成flows并按每秒发车率分配;另一种是按真实轨迹文件直接回放。前者适合做统计指标对比,后者适合做单车级轨迹验证。我的建议是前者用于宏观校准,后者用于微观排查。

信号配时方面,数据集的Signal_Timing/目录里一般有按相位给出的绿信比、周期时长和相位差。写 SUMO 的tls程序时,我习惯把每个交叉口的周期和各相位起始时间直接写进additional.xml:

<tlsLogic id="whitemud_1" type="actuated" programID="1" offset="0"> <phase duration="30" state="GGGggrrrGGGggrrr"/> <phase duration="5" state="yyyggrrryyyggrrr"/> </tlsLogic>

这段配置声明了一个感应式信号灯,第一相位放行东西向直行和左转,第二相位是 5 秒黄灯。注意state字符串的字符顺序必须和交叉口连接关系一一对应,否则会出现绿灯放行方向与预期相反的情况。

加载方式是在启动 sumo 时附加-a additional.xml,再把tlsLogic通过--tls.set连接到交叉口节点。如果信号配时文件和流量检测器时间戳有偏差,仿真结果会出现周期性排队长度抖动,一般优先检查时钟基准。

4.3 检测器验证:把仿真占有率拉回实测轨道

SUMO 里加入检测器来对比实测数据,是这份数据最有价值的使用方式。典型命令是:

sumo -n whitemud.net.xml -r flows.rou.xml -a detectors.add.xml \ --tripinfo-output tripinfo.xml --vehroute-output vehroute.xml

detectors.add.xml里每个检测器要指定lane和pos参数,这两个值要和实测检测器表里的车道编号、断面位置对齐。跑完仿真后,用sumo-output-parser提取每个检测器的占有率,和实测半小时聚合值做差,如果偏差超过 15%,优先检查流量加载比例而不是怀疑检测器位置。

5. 避坑指南:Whitemud Drive 数据集使用中的四个常见问题

现象 1:用轨迹文件里的瞬时速度计算区间平均速度,结果比检测器统计值偏高。

原因:检测器统计的是断面时间平均速度,而轨迹数据是车辆逐秒的空间平均速度。两者在交通流理论里本来就不是同一个量,尤其在排队消散过程中差异会被放大。解决:对比实测前,把轨迹数据按检测器所在的断面位置切分,只保留经过该断面前后 5 秒的瞬时速度,再做时间平均。这样可以缩小口径差异。

现象 2:某些车道的流量之和与主线总流量对不上,少了一截。

原因:数据集里的流量文件往往只包含主线和部分匝道,有些匝道在当天被标记为施工关闭,但文件里不会显式标注。解决:对照流量文件里的lane_id列表和几何文件里的匝道列表做差,筛出缺失项。如果是实验数据集,缺失时段一般会伴随空文件或全零行,直接用检测器占有率数据补插。

现象 3:信号灯设置正确,但仿真里的排队长度是实测的两倍。

原因:信号配时文件给出的是计划时间表,但真实信号控制器带有感应延长功能,实测绿信比往往大于文件标称值。解决:用数据集里的信号相位日志反推实际绿灯时长,然后按 0.85 到 1.0 的系数修正phase的duration,优先调整次干道方向的时长。

现象 4:地图匹配后部分轨迹点落在路网外。

原因:坐标转换时使用了错误的 UTM 分区,或者把lat/lon的输入顺序颠倒。解决:先用独立的 GPS 点对几何文件做一次整体偏移量检查。常见做法是在路网节点里选三个相距较远的点,用地图上的真实坐标去验证投影参数,而不是全部依赖代码脚本。

现象 5:导入 SUMO 后部分路段不连通,车流绕行失效。

原因:几何文件里的路段端点和交叉口连接表之间存在拓扑断裂,常见于高架与地面转换节点。解决:用 SUMO 自带的netcheck工具扫描孤立边,人工在netedit里连接缺失的连接器。

6. 验证数据可信度:回放单车轨迹与交叉口队列估计的联动检查

拿到这份数据,除了做宏观流量对比,还可以用轨迹回放验证微观逻辑是否真实。做法是抽取一辆车从进入主线到离开的完整轨迹,把它叠加到 SUMO 车辆路径上,对比经纬度序列是否与路网几何重叠。如果轨迹点出现明显的方向性偏移,通常是横轴(经度)和纵轴(纬度)在投影转换时被对调,这是一个能快速暴露坐标系错误的手段。

另一个实用的验证技巧是交叉口队列估计。用数据集里的信号时间表,结合入口车道的到达曲线,就能离线估计每个周期内最大排队长度的分布。把它和实测视频标记数据做对比,能同时验证信号配时的准确性和流量输入的合理性。我一般会在路网的关键交叉口布设虚拟排队计数器,把每周期的排队最大长度导出成 CSV,再与实测统计做百分位对比。

如果说这个数据集最值得借鉴的方法,就是把卡尔曼滤波估计的区间平均速度放到仿真的验证环节中。具体做法是:先跑一组基准仿真,得到每个检测器的模拟占有率;然后对占有率序列做卡尔曼平滑,如果速度残差在 ±5 km/h 以内,说明参数标定到位。若偏差集中在早高峰时段,优先检查是否是发车率在需求峰值时段的加载方式过于激进。

从那以后,我每次拿到真实路网数据集,都会强制走一遍「坐标验证、单位统一、信号灯反推、轨迹回放」这套流程。这份 Whitemud Drive 数据集的完整价值正是在这里:它逼迫你把仿真从「好看的路网」推进到「能和检测器对上账」的阶段。希望这篇拆解能帮你少走一段弯路。

本文还有配套的精品资源,点击获取

相关新闻

Firebase Data Connect 嵌套 SQL 报 Invalid SQL statement 的排查

Firebase Data Connect 嵌套 SQL 报 Invalid SQL statement 的排查

云函数里通过 executeGraphql 的 _execute 字段跑原生 SQL:一个数据修改 CTE 同时完成"确保用户存在"和"插入菜谱"。同样的 SQL 拆开单条调用都正常,合起来就只得到一句 Invalid SQL statement,去掉结尾的 SELECT 也照报。这类报错信息量极少,真正的语…

2026/10/21 3:40:28 阅读更多 →
语言加工神经计算模型实战:预测编码与脑信号对齐经验分享

语言加工神经计算模型实战:预测编码与脑信号对齐经验分享

1. 从一个失败实验说起&#xff1a;当模型把"生日快乐"理解成"数学题"七八年前&#xff0c;我还在某高校的认知神经科学实验室干活。当时组里接了一个跨学科项目&#xff0c;要把经典的语义启动范式搬进计算模型里&#xff0c;用一个循环神经网络去模拟&qu…

2026/10/21 3:40:28 阅读更多 →
Spring SpEL表达式引擎原理与实战:从求值链路到安全上下文

Spring SpEL表达式引擎原理与实战:从求值链路到安全上下文

简介&#xff1a;面向具备一定Java基础、正在学习Spring框架的开发者&#xff0c;这份代码包用于直观理解SpEL&#xff08;Spring Expression Language&#xff09;的核心语法与求值方式&#xff0c;解决Spring配置、注解与AOP中动态表达式写法的困惑。压缩包仅16KB&#xff0c…

2026/10/21 3:40:28 阅读更多 →

最新新闻

BMI160六轴传感器驱动开发实战:从寄存器配置到姿态解算的完整指南

BMI160六轴传感器驱动开发实战:从寄存器配置到姿态解算的完整指南

简介&#xff1a;面向STM32F030平台的博世BMI160自写驱动代码&#xff0c;通过I2C总线实现三轴陀螺仪的基础数据交互&#xff0c;适用于嵌入式开发者学习传感器驱动编写或快速搭建原型。压缩包共3个文件、仅6KB&#xff0c;包含BMI160.c源文件以及BMI160.h、BMI160_prm.h两个头…

2026/10/21 4:34:49 阅读更多 →
AI原生应用API编排实战:上下文管理、流式输出与容错降级

AI原生应用API编排实战:上下文管理、流式输出与容错降级

跟AI原生应用打了几年交道&#xff0c;从最早拿大模型API接个聊天机器人&#xff0c;到后来做稍复杂的客服、内容生成、文档分析这类真实业务&#xff0c;我越来越确认一件事&#xff1a;决定一个AI应用能不能从Demo走向可用&#xff0c;最关键的往往不是模型选得多大、Prompt写…

2026/10/21 4:34:49 阅读更多 →
STM32F0 I2C时序配置:TIMINGR寄存器计算与避坑指南

STM32F0 I2C时序配置:TIMINGR寄存器计算与避坑指南

简介&#xff1a;这是一款面向STM32F0系列开发者的硬件I2C时序参数配置工具&#xff0c;由ST官方发布&#xff0c;用于解决I2C总线通信中上升沿、下降沿、建立时间与保持时间等关键时序的计算与寄存器配置问题。工具以Excel表格形式呈现&#xff0c;内置标准模式、快速模式以及…

2026/10/21 4:34:49 阅读更多 →
知识工作插件集拆解:打通收集、整理、输出断点的实战方案

知识工作插件集拆解:打通收集、整理、输出断点的实战方案

先交代一下背景。我做知识管理工作有三四年&#xff0c;日常就是大量阅读、开会、写方案&#xff0c;中间还要不停地把碎片信息转成可复用的素材。很长一段时间里&#xff0c;我的工作状态是&#xff1a;看到有用的内容&#xff0c;复制到临时文档&#xff1b;想到一个点子&…

2026/10/21 4:34:49 阅读更多 →
AI辅助API开发全流程:从需求澄清到接口文档的工程实践指南

AI辅助API开发全流程:从需求澄清到接口文档的工程实践指南

一个后端接口的开发&#xff0c;通常不是从“写代码”开始的。你把需求文档拿在手上&#xff0c;翻到第三页&#xff0c;发现入参少了一个字段定义&#xff1b;打开接口文档&#xff0c;错误码表还是去年那版&#xff1b;数据库表结构跟前任留下的注释对不上。多数时间被耗在这…

2026/10/21 4:34:49 阅读更多 →
视频配乐生成中的三大对齐:语义、时间与节奏

视频配乐生成中的三大对齐:语义、时间与节奏

视频配乐生成这个方向&#xff0c;最难的地方从来不是“让模型会作曲”——现在的音频生成模型各有各的强项&#xff0c;旋律、音色、和声做得都挺像样。但我自己做了几年多模态生成项目之后最大的感受是&#xff1a;配乐的核心危机&#xff0c;在于“对齐”。生成的音乐单独听…

2026/10/21 4:33:49 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →