简介#
本教程将指导您如何使用 通用交通规范格式 (GTFS) 中的数据来优化现有的公共交通 (PT) 仿真场景,该格式的数据在许多地区都可用。建议先完成 公共交通教程。
创建 PT 仿真包含三个步骤:
- 初始网络要求
- 寻找 GTFS 数据源
- 将 GTFS 数据映射到网络
初始网络要求#
Note
使用 osmWebWizard 工具 可能是获取网络的最简单方法,但此过程适用于任何(地理参考的)SUMO 网络。
该过程在使用来自 OpenStreetMap 并包含公交线路数据的网络时效果最佳(参见 ptLines 输出)。网络应包含您想要建模的所有交通类型(模式)的边以及相关的边类型。该脚本目前支持以下映射:
tram-> 所有允许 SUMO 车辆类别 tram 的边subway-> OSM 类型 railway.subwaylight_rail-> OSM 类型 railway.light_railtrain-> OSM 类型 railway.railbus-> 所有允许 SUMO 车辆类别 bus 的边ship-> OSM 类型 ship
如果网络不包含边类型,则仅可能进行公交车和有轨电车映射,这将使用允许相关车辆类别的边。
在本教程中,我们使用 osmWebWizard 工具导入了 Eichwalde 的网络:

寻找 GTFS 数据源#
有 几种来源 可以获取 GTFS 数据,通常在您当地的交通机构网站上。德国的一些示例:
本教程使用 VBB 的 2019 年 6 月数据集。您可以下载数据,也可以直接将文件的 URL 提供给脚本。
将 GTFS 数据映射到网络#
如果您拥有所有可用数据,则需要决定要建模的日期。脚本无法自行找到代表性的日期,您需要自己找一个。通常建议提前检查学校(及其他)假期的日历。
在本教程中,我们选择 2019 年 9 月 4 日(星期三)。
此外,您可以选择应导入哪些公共交通模式(公交车、有轨电车、火车、地铁和/或渡轮)。默认情况下,将导入所有模式。在本教程中,我们将仅导入公交车。
根据可用的输入文件,您可以选择不同的方式生成路线。如果您拥有从 OpenStreetMap 提取的线路和站点信息(使用适当的 netconvert 选项,如 ptLines 输出 中所述),脚本可以将此信息与 GTFS 数据合并。
通常,我们可以从 GTFS 中提取三种类型的数据:时刻表(每辆车的分钟精度)、站点位置(地理坐标)和路线(行驶街道的地理坐标),其中最后一种是可选的。GTFS 文件应为 zip 格式,并至少包含 routes.txt、stops.txt、stop_times.txt、trips.txt、calendar.txt 和 calendar_dates.txt。如果您的 GTFS 数据有一个(非空的)shapes.txt 文件,那么它也包含路线信息。在本教程的其余部分,我们将假设您始终希望至少从 GTFS 导入时刻表。
从 OSM 中,您(有时)可以获取抽象时刻表(“工作日每 10 分钟运行一条线路”)以及站点位置和路线。虽然可能希望为这三种数据类型中的每一种单独选择是从 OSM 还是从 GTFS 导入,但目前仅支持以下场景:
- 从 OSM 导入 站点。这会将每个 GTFS 站点位置映射到最合适的 OSM 站点位置。这是推荐的方法。
- 完全忽略 OSM 和路线数据,请参阅 从最短路径生成路线。
- 此方法适用于任何网络(不仅仅是 OSM),并且如果您没有 ptline 输出或您的 GTFS 不包含 shapes.txt 文件,则是默认方法。
- 从 OSM 导入 路线。
- 这将尝试通过使用几何距离为每条 GTFS 路线找到相应的 OSM 路线(不使用来自 OSM 的站点信息)
从最短路径生成路线#
在这种情况下,每辆公共交通车辆的路线将通过查找站点之间的最快路径来定义。
如果您已下载网络和 GTFS 数据(或拥有 URL),则只需运行以下命令:
python tools/import/gtfs/gtfs2pt.py -n osm.net.xml.gz --gtfs GTFS_VBB_Juni-Dezember-2019.zip --date 20190904 --modes bus
脚本运行约五分钟,并生成几个子目录,但最终会提供三个输出文件:
pt_vtypes.xmlgtfs_publictransport.add.xml(定义静态路线和站点)gtfs_publictransport.rou.xml(定义单个公共交通车辆)
vtypes 输出为使用的不同公共交通模式生成非常简单的车辆类型定义。鼓励您修改此文件并使其适应实际情况,特别是关于不同模式的容量(座位数)。当然,您也可以使用来自其他来源的车辆类型并跳过此输出。
为了在仿真中使用它们,您应按上述顺序将它们作为附加文件(而不是路线文件!)传递。
sumo-gui -n osm.net.xml.gz --additional vtypes.xml,gtfs_pt_stops.add.xml,gtfs_pt_vehicles.add.xml
从 OSM 生成路线#
在这种情况下,每辆车的路线取自 OSM。当我们使用 osmWebWizard 工具导入网络时,我们启用了“导入公共交通”选项,该选项会自动生成包含公交线路的 "osm_ptlines.xml" 文件。
调用如下:
python tools/import/gtfs/gtfs2pt.py -n osm.net.xml.gz --gtfs GTFS_VBB_Juni-Dezember-2019.zip --date 20190904 --modes bus --osm-routes osm_ptlines.xml --repair
选项 --repair 不是强制性的,但很有帮助。它获取给定的 ptLines 并尝试在映射之前使用 duarouter 修复它们。如果某些 ptLines 的路线无效,它们将不会用于映射。
脚本生成以下输出文件:
pt_vtypes.xmlgtfs_publictransport.add.xml(定义站点)gtfs_publictransport.rou.xml(定义单个公共交通车辆)gtfs_missing.xml包含无法导入的 GTFS 数据元素(站点和 ptLines)invalid_osm_routes.txt包含修复 ptLines 时的警告和错误
运行仿真:
sumo-gui -n osm.net.xml.gz --additional vtypes.xml,gtfs_pt_stops.add.xml,gtfs_pt_vehicles.add.xml
从 OSM 导入站点#
在这种情况下,通过使用来自 OSM 的公共交通站点位置来指导将(不精确的)GTFS 坐标映射到候选网络边。当 GTFS 数据没有形状信息时,这很有用,并提供两个优势:
- 映射速度大大加快,因为考虑的候选边更少
- 公共轨道运输的映射大大改善,因为 OSM 站点编码了轨道典型使用方向的信息(从而改善了车站内的停靠轨道分配)
调用如下:
python tools/import/gtfs/gtfs2pt.py -n osm.net.xml.gz --gtfs GTFS_VBB_Juni-Dezember-2019.zip --date 20190904 --modes bus --stops osm_stops.add.xml
生成的仿真输入与 上文 相同,因此可以使用相同的 sumo/sumo-gui 调用。
Note
建议使用 netconvert 选项 --ptstop-output
在仿真中使用输出#
以下是通过调用 sumo-gui 在仿真中使用映射的站点和公交车的示例:

