如何通过GTFS的stop_times.txt准确获取公交站点当日有效停靠时刻
解决GTFS查询站点下一班公交的日期匹配问题
核心关联逻辑
stop_times.txt本身确实没有日期/星期字段,GTFS的运营周期是通过**服务(service)**体系管理的,必须通过表关联过滤有效班次:
- 用
stop_times.txt中的trip_id关联trips.txt的trip_id,获取对应service_id - 用
service_id关联calendar.txt或calendar_dates.txt,筛选当前日期有效的服务
具体查询步骤
1. 筛选当前日期有效的service_id
- 优先用
calendar_dates.txt处理例外日期(如节假日加开/停运):exception_type=1表示当日运营,exception_type=2表示当日停运 - 常规日期用
calendar.txt:检查当前日期在start_date和end_date范围内,且对应星期字段(monday至sunday)值为1
2. 映射获取有效trip_id
通过trips.txt,将第一步得到的有效service_id关联到对应的trip_id集合
3. 提取站点的下一班公交
在stop_times.txt中筛选:
- 目标站点的
stop_id - 属于第二步得到的有效
trip_id departure_time(或arrival_time)晚于当前时刻的条目,按时间升序排序后取第一条
时间格式处理注意
GTFS的时间可能超出24小时(如次日凌晨1点记为25:00:00),查询时需将当前日期+时间转换为统一时间戳,避免跨天判断错误。
解决重复/近时间无效条目问题
你看到的时间极近的条目,实际是对应不同运营周期的班次(如工作日/周末/节假日班次),通过上述service_id过滤后,只会保留当前日期有效的班次,自动剔除无效条目。
内容的提问来源于stack exchange,提问作者Ran Shorowitz
相关产品推荐
相关产品推荐

