三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从0到1:使用transitfeed创建你的第一个GTFS公交数据feed

从0到1:使用transitfeed创建你的第一个GTFS公交数据feed

从0到1:使用transitfeed创建你的第一个GTFS公交数据feed

【免费下载链接】transitfeedA Python library for reading, validating, and writing transit schedule information in the GTFS format.项目地址: https://gitcode.com/gh_mirrors/tra/transitfeed

transitfeed是一个强大的Python库,专为读取、验证和写入GTFS(通用公交信息规范)格式的公交时刻表数据而设计。通过本教程,你将快速掌握如何使用transitfeed库构建一个完整的GTFS数据feed,轻松实现公交数据的标准化处理。

📋 准备工作:安装transitfeed

在开始创建GTFS数据feed之前,需要先安装transitfeed库。首先克隆项目仓库:

git clone https://gitcode.com/gh_mirrors/tra/transitfeed cd transitfeed

然后安装所需依赖:

pip install -r requirements.txt

🚀 快速入门:创建基础GTFS数据

transitfeed提供了简洁的API来构建GTFS数据。我们以examples/small_builder.py为例,展示如何创建一个包含基本要素的GTFS feed:

1. 初始化Schedule对象

import transitfeed schedule = transitfeed.Schedule()

Schedule是transitfeed的核心对象,用于管理整个GTFS数据集。

2. 添加公交 agency 信息

schedule.AddAgency("Fly Agency", "http://iflyagency.com", "America/Los_Angeles")

Agency信息包含公交运营机构的名称、网址和时区,是GTFS数据的基础。

3. 设置服务时间

service_period = schedule.GetDefaultServicePeriod() service_period.SetWeekdayService(True) # 设置工作日运营 service_period.SetDateHasService('20070704') # 特殊日期运营

通过ServicePeriod对象定义公交线路的运营时间,支持按星期和具体日期设置。

4. 添加站点信息

stop1 = schedule.AddStop(lng=-122, lat=37.2, name="Suburbia") stop2 = schedule.AddStop(lng=-122.001, lat=37.201, name="Civic Center")

每个站点需要包含经纬度坐标和名称,transitfeed会自动处理坐标验证。

5. 创建公交线路

route = schedule.AddRoute(short_name="22", long_name="Civic Center Express", route_type="Bus")

公交线路需指定短名称、长名称和类型(如公交、地铁等)。

6. 添加行程和站点时间

# 往程 trip = route.AddTrip(schedule, headsign="To Downtown") trip.AddStopTime(stop1, stop_time='09:00:00') trip.AddStopTime(stop2, stop_time='17:45:00') # 返程 trip = route.AddTrip(schedule, headsign="To Suburbia") trip.AddStopTime(stop2, stop_time='17:30:00') trip.AddStopTime(stop1, stop_time='17:45:00')

每个行程(Trip)包含多个站点时间(StopTime),定义公交车在各站点的到达时间。

✅ 验证与导出GTFS数据

完成数据构建后,需要验证数据合法性并导出为GTFS标准的ZIP文件:

schedule.Validate() # 验证数据完整性和规范性 schedule.WriteGoogleTransitFeed("google_transit.zip") # 导出为ZIP文件

transitfeed的Validate()方法会自动检查常见错误,如缺失必填字段、时间格式错误等,确保生成的GTFS数据符合规范。

📚 进阶功能探索

transitfeed还提供了更多高级功能,帮助你处理复杂的公交数据场景:

批量导入与合并

使用merge.py工具可以合并多个GTFS数据集,适合处理跨区域的公交数据:

python merge.py --old_feed old_gtfs.zip --new_feed new_gtfs.zip --output merged_gtfs.zip

数据可视化

通过schedule_viewer.py可以生成公交线路的可视化页面,直观展示公交网络结构:

python schedule_viewer.py --feed google_transit.zip --output viewer.html

错误检测与修复

feedvalidator.py是一个强大的GTFS数据验证工具,能生成详细的错误报告并提供修复建议:

python feedvalidator.py google_transit.zip --output validation_report.html

💡 常见问题解决

如何处理大量数据?

对于包含成百上千个站点和线路的大型GTFS数据,建议使用transitfeed的批处理功能,通过transitfeed/loader.py实现高效数据加载。

如何扩展GTFS数据字段?

transitfeed支持GTFS扩展字段,通过extensions/googletransit中的模块可以添加自定义属性,如车辆类型、平台代码等。

🎯 总结

通过transitfeed库,你可以轻松创建符合GTFS标准的公交数据feed,实现公交信息的标准化、验证和共享。无论是小型公交系统还是大型交通网络,transitfeed都能提供简洁而强大的工具支持,帮助你高效管理公交数据。

现在就开始使用transitfeed,为你的公交系统构建专业的GTFS数据feed吧!如需更多帮助,可以参考项目中的示例代码或查阅官方文档。

【免费下载链接】transitfeedA Python library for reading, validating, and writing transit schedule information in the GTFS format.项目地址: https://gitcode.com/gh_mirrors/tra/transitfeed

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表