【问题标题】:How to match static GTFS with GTFS-RT trip updates如何将静态 GTFS 与 GTFS-RT 行程更新相匹配
【发布时间】:2017-10-28 17:52:39
【问题描述】:

我正在使用几个不同的 GTFS 和 GTFS-RT 提要,并将这些数据存储到 SQL 数据库中。

我应该如何将静态 GTFS 数据与 GTFS-RT 行程更新匹配/链接?

我正在尝试显示特定 stop_id 的停止时间。我能够从静态 GTFS 获取停止时间,但我想用 GTFS-RT 行程更新停止时间更新“修补”这些时间。

看起来 GTFS-RT 的规定非常松散,只有少数字段是强制性的。我正在使用的 GTFS-RT 提要之一在其行程更新中有trip_id,另一个提要没有trip_id。

更新 4.11.2017

我设法使用下面的查询将 GTFS-RT 行程更新与静态 GTFS 匹配。出于某种原因,无法获取所有行程更新的 trip_id。也许问题出在数据本身,我的查询有问题吗?

const trip = await knex('trips')
  .select('trips.trip_id')
  .innerJoin('routes', 'routes.route_id', 'trips.route_id')
  .innerJoin('stop_times', 'stop_times.trip_id', 'trips.trip_id')
  .whereIn('trips.service_id', *day active service ids*)
  .andwhere('routes.route_id', tripUpdate.route_id)
  .andWhere('stop_times.departure_time', tripUpdate.trip_start_time)
  .andWhere('trips.direction_id', tripUpdate.direction_id)
  .orderBy('stop_times.stop_sequence')
  .first();

【问题讨论】:

  • 是的,这是一个定义松散的标准。最近的 GTFS-rt 2.0 Spec 澄清了这一点,但这仍然是允许的。为什么?有一个用例可以为短期中断提供服务信息。这被许多使其正常的提要滥用。您可能必须编写一些可以在提要和 GTFS 之间进行匹配的逻辑。但是,如果不知道您在谈论什么提要,就很难说这是否可能。
  • 您使用的是哪个DBMS 产品?后格雷斯?甲骨文? “SQL”只是一种查询语言,并不是特定数据库产品的名称。
  • 我正在使用 mariadb。

标签: sql gtfs


【解决方案1】:

问题可能出在

.andWhere('stop_times.departure_time', tripUpdate.trip_start_time)

select 语句中的子句。

gtfs 规范规定 时间必须是八位数字,采用 HH:MM:SS 格式(H:MM:SS 也可以接受,如果小时以 0 开头)如果您的日程安排时间为 5 :37:00 并且 TripUpdates 中的 start_time 是 05:37:00,您的语句将不会返回行程 ID。如果这是问题所在,则在将它们从 stop_times.txt 添加到数据库时需要在前面加上“0”,或者调整上面的子句。

【讨论】:

  • 在我的情况下,问题是没有trip_id,我尝试将GTFS-RT TripUpdate 与没有trip_id 的静态GTFS 匹配。我在第一篇文章中添加了查询,以解释我如何尝试匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
  • 2023-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多