GTFS 转公共交通数据模型 (公共交通)

摘要

可将一个或多个通用交通数据规范 (GTFS) 公共交通数据集转换为一组要素类和表,这些要素类和表以 Network Analyst 公共交通数据模型定义的格式表示公交站点、线路和时间表。

此工具生成的交通数据模型要素类和表如下:

  • Stops
  • LineVariantElements
  • Calendars
  • CalendarExceptions
  • Lines
  • LineVariants
  • Runs
  • ScheduleElements
  • Schedules

此工具的输出可以用作将公共交通数据模型连接至街道工具的输入,从而为启用交通的网络数据集准备所有必要的输入。 创建此类网络数据集的完整工作流请参阅创建和使用具有公共交通数据的网络数据集

此工具的输出也可用作计算交通服务频率工具的输入。

使用情况

  • 所有输入 GTFS 数据集中的数据都将合并到相同的输出表和要素类集中。 使用多个输入 GTFS 数据集的典型动机是对都会区进行建模,在都会区中,同一地理区域有多个交通服务提供商运营。

  • 该工具将对每个输入 GTFS 数据集执行一些验证,以检查常见的数据问题。 发现问题后,该工具会发出警告且不会处理该数据集。 工具输出将仅包括已成功处理的输入 GTFS 数据集的数据。 如果已成功处理部分 GTFS 数据集,且由于数据问题未处理其他数据集,则可以通过再次运行该工具,并选中追加到现有表参数(Python 中的 append = "APPEND")来修复数据问题并将已修复的 GTFS 数据集追加到现有工具输出中。

  • 每个输入 GTFS 数据集必须包含 stops.txtroutes.txttrips.txtstop_times.txt 文件,以及 calendar.txtcalendar_dates.txt 文件,或二者兼而有之。 如果存在 frequencies.txt 文件,则会使用该文件。

  • 虽然 GTFS 允许 stop_times.txt 文件中的 arrival_timedeparture_time 字段使用空白值,但是公共交通评估员在网络数据集中使用的 Network Analyst 公共交通数据模型需要确切的时间。 选中插值空白停止时间参数(Python 中的 interpolate = "INTERPOLATE")以对输入 GTFS 数据集估算到达时间和离开时间,该数据集中的 stop_times.txt 文件的所有 arrival_timedeparture_time 字段均不含确切值。

  • 该工具可使用 GTFS stops.txt 文件中的 stop_latstop_lon 字段的纬度和经度值来构造 Stops 要素类。

  • GTFS stops.txt 文件中的 stop_latstop_lon 定义停靠点的纬度和经度。 如果停靠点的 location_type 字段值为 3 或 4,则规范允许这些字段为 null。 然而,因为此工具创建地理要素以表示停靠点,因此无法绘制不具有纬度和经度的停靠点。 因此,location_type 值为 3 或 4 且 stop_latstop_lon 值为 null 的停靠点将被跳过,且不包含在工具的输出中。

  • 该工具可以在由公共交通行程直接连接的每一对停靠点之间创建一条直线,从而构造 LineVariantElements 要素。

    注:

    LineVariantElements 要素并不用于表示公交车、火车或其他公共交通工具所行驶的实际地理路径,而是表示交通系统的逻辑连接。 LineVariantElements 要素不可用于可视化。 网络数据集中的公共交通赋值器将使用公共交通时间表来确定遍历 LineVariantElements 要素所需的行驶时间,因此其形状和长度无关紧要。 尽管如此,您也可以手动编辑 LineVariantElements 要素的形状,但不应分割或合并要素。

  • 如果在相同的两个停靠点之间有多条 GTFS 路径或同一路径的变体提供服务,则将针对每个提供服务的路径或路径变体创建一个 LineVariantElements 要素。

    例如,如果 GTFS route_id 10 和 GTFS route_id 47 在两个相同的停靠点之间行驶,且中间没有其他的停靠点,则工具将生成两个 LineVariantElements 要素,一个用于 route_id 10,一个用于 route_id 47。 这两个线要素在地理上是重合的。

    同样,如果 route_id 15 服务于两个不同的终点站,但所有 route_id 15 行程,无论终点站是否连接了特定的一对停靠点,都会为每个终点站创建一个 LineVariantElements 要素,从而产生两个重合 LineVariantElements 要素。 这些路径变体通常对应于 GTFS 数据集中的不同 shape_id 值。

  • 由于公共交通数据模型需要具有特定名称的要素类和表,因此不可能在同一地理数据库中包含多组公共交通数据模型要素类和表。 具有含公共交通数据模型要素类的现有要素数据集中不应包括目标要素数据集。

  • 如果目标要素数据集位于企业级地理数据库中,则不得对其进行版本化。 在运行工具之前,协调并提交要素数据集中的数据,并取消注册版本

参数

标注说明数据类型
输入 GTFS 文件夹

一个或多个包含有效 GTFS 数据的文件夹。 每个文件夹必须包含 GTFS stops.txtroutes.txttrips.txtstop_times.txt 文件,以及 calendar.txtcalendar_dates.txt 文件,或二者兼而有之。

Folder
目标要素数据集

将创建启用交通的网络数据集的要素数据集。 此工具创建的 StopsLineVariantElements 要素类将放置在此要素数据集中,此工具创建的输出表将放置在此要素数据集的父地理数据库中。

要素数据集可以位于文件地理数据库或企业级地理数据库中,并且可以包含任何空间参考。 如果目标要素数据集位于企业级地理数据库中,则不得对其进行版本化。 具有含公共交通数据模型要素类的现有要素数据集中不应包括目标要素数据集。

Feature Dataset
插值空白停止时间
(可选)

指定在创建公共交通数据模型表时,是否在 GTFS stop_times.txt 文件中 arrival_timedeparture_time 字段中内插空白值。

  • 选中 - 将使用简单的线性插值法内插空白值。 原始 GTFS 数据不会被更改。 如果原始数据中没有空白值,则不会进行插值。
  • 未选中 - 将不会内插空白值。 如果在输入 GTFS 数据中找到空白值,则该工具将发出警告且不会处理 GTFS 数据集。 这是默认设置。
Boolean
追加到现有表
(可选)

指定是否将输入 GTFS 数据集追加到目标要素数据集及其父地理数据库中的现有公共交通数据模型要素类和表。

如果目标要素数据集及其父地理数据库不包含现有公共交通数据模型要素类和表,则将隐藏此参数。

  • 选中 - 数据将被追加到现有要素类和表。
  • 未选中 - 不追加数据。 将覆盖现有要素类和表。 这是默认设置。
Boolean

派生输出

标注说明数据类型
更新的目标要素数据集

已添加新要素类的要素数据集。

Feature Dataset
输出停靠点

Network Analyst 公共交通数据模型的 Stops 要素类。

Feature Class
输出线变量元素

Network Analyst 公共交通数据模型的 LineVariantElements 要素类。

Feature Class
输出日历

Network Analyst 公共交通数据模型的 Calendars 表。

Table
输出日历异常

Network Analyst 公共交通数据模型的 CalendarExceptions 表。

Table
输出线

Network Analyst 公共交通数据模型的 Lines 表。

Table
输出线变量

Network Analyst 公共交通数据模型的 LineVariants 表。

Table
输出运行

Network Analyst 公共交通数据模型的 Runs 表。

Table
输出计划元素

Network Analyst 公共交通数据模型的 ScheduleElements 表。

Table
输出计划

Network Analyst 公共交通数据模型的 Schedules 表。

Table

arcpy.transit.GTFSToPublicTransitDataModel(in_gtfs_folders, target_feature_dataset, {interpolate}, {append})
名称说明数据类型
in_gtfs_folders
[in_gtfs_folders,...]

一个或多个包含有效 GTFS 数据的文件夹。 每个文件夹必须包含 GTFS stops.txtroutes.txttrips.txtstop_times.txt 文件,以及 calendar.txtcalendar_dates.txt 文件,或二者兼而有之。

Folder
target_feature_dataset

将创建启用交通的网络数据集的要素数据集。 此工具创建的 StopsLineVariantElements 要素类将放置在此要素数据集中,此工具创建的输出表将放置在此要素数据集的父地理数据库中。

要素数据集可以位于文件地理数据库或企业级地理数据库中,并且可以包含任何空间参考。 如果目标要素数据集位于企业级地理数据库中,则不得对其进行版本化。 具有含公共交通数据模型要素类的现有要素数据集中不应包括目标要素数据集。

Feature Dataset
interpolate
(可选)

指定在创建公共交通数据模型表时,是否在 GTFS stop_times.txt 文件中 arrival_timedeparture_time 字段中内插空白值。

  • INTERPOLATE将使用简单的线性插值法内插空白值。 原始 GTFS 数据不会被更改。 如果原始数据中没有空白值,则不会进行插值。
  • NO_INTERPOLATE将不会内插空白值。 如果在输入 GTFS 数据中找到空白值,则该工具将发出警告且不会处理 GTFS 数据集。 这是默认设置。
Boolean
append
(可选)

指定是否将输入 GTFS 数据集追加到目标要素数据集及其父地理数据库中的现有公共交通数据模型要素类和表。

  • APPEND数据将被追加到现有要素类和表。
  • NO_APPEND不追加数据。 将覆盖现有要素类和表。 这是默认设置。
Boolean

派生输出

名称说明数据类型
updated_target_feature_dataset

已添加新要素类的要素数据集。

Feature Dataset
output_stops

Network Analyst 公共交通数据模型的 Stops 要素类。

Feature Class
output_line_variant_elements

Network Analyst 公共交通数据模型的 LineVariantElements 要素类。

Feature Class
output_calendars

Network Analyst 公共交通数据模型的 Calendars 表。

Table
output_calendar_exceptions

Network Analyst 公共交通数据模型的 CalendarExceptions 表。

Table
output_lines

Network Analyst 公共交通数据模型的 Lines 表。

Table
output_line_variants

Network Analyst 公共交通数据模型的 LineVariants 表。

Table
output_runs

Network Analyst 公共交通数据模型的 Runs 表。

Table
output_schedule_elements

Network Analyst 公共交通数据模型的 ScheduleElements 表。

Table
output_schedules

Network Analyst 公共交通数据模型的 Schedules 表。

Table

代码示例

GTFSToPublicTransitDataModel 示例 1(Python 窗口)

以下脚本演示了如何在 Python 窗口中使用 GTFSToPublicTransitDataModel 函数。

fd_path = r"E:\TransitAnalysis\TransitNetwork.gdb\TransitNetwork"
arcpy.transit.GTFSToPublicTransitDataModel([r"E:\GTFS\Agency1", r"E:\GTFS\Agency2"], fd_path)
GTFSToPublicTransitDataModel 示例 2(独立脚本)

以下独立 Python 脚本演示了如何同时使用 GTFSToPublicTransitDataModelConnectPublicTransitDataModelToStreets 函数来创建已启用交通的网络数据集。

import os
import arcpy
arcpy.CheckOutExtension("network")

gtfs_folders = [
    r"E:\GTFS\Agency1",
    r"E:\GTFS\Agency2"
]
streets_orig = r"E:\Data\StreetData.gdb\Streets"

working_folder = r"E:\TransitAnalysis"
nd_template = os.path.join(working_folder, "TransitNetworkTemplate.xml")
gdb_name = "TransitNetwork.gdb"
out_gdb = os.path.join(working_folder, gdb_name)
fd_name = "TransitNetwork"
fd_path = os.path.join(out_gdb, fd_name)
streets = os.path.join(fd_path, "Streets")
nd_name = "TransitNetwork_ND"
nd_path = os.path.join(fd_path, nd_name)

# Create a file geodatabase and feature dataset to store the network dataset
arcpy.management.CreateFileGDB(working_folder, gdb_name)
arcpy.management.CreateFeatureDataset(out_gdb, fd_name, arcpy.SpatialReference(4326))

# Copy the streets data into the feature dataset so it can be used by the network dataset
# If the original streets are not in the same spatial reference as the feature dataset, you might
# need to use the Project tool instead of Copy.
arcpy.management.Copy(streets_orig, streets)

# Convert the GTFS dataset into public transit data model tables and feature classes
arcpy.transit.GTFSToPublicTransitDataModel(gtfs_folders, fd_path)

# Connect the transit stops to the streets and create the rest of the data model feature classes
# Use an expression to connect transit stops only to streets where pedestrians are allowed.
where = "PedestriansAllowed = 1"
arcpy.transit.ConnectPublicTransitDataModelToStreets(fd_path, streets, "100 meters", where)

# Create the network dataset from a template
arcpy.na.CreateNetworkDatasetFromTemplate(nd_template, fd_path)

# Build the network dataset
arcpy.na.BuildNetwork(nd_path)

环境

此工具不使用任何地理处理环境。

许可信息

  • Basic: 是
  • Standard: 是
  • Advanced: 是

相关主题