如何将静态GTFS与GTFS-RT行程更新匹配

时间:2017-10-28 17:52:39

标签: sql gtfs

我正在消费几种不同的GTFS& GTFS-RT提供,我将这些数据存储到SQL数据库。

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

我试图显示特定stop_id的停止时间。我能够从静态GTFS获得停止时间,但我希望通过GTFS-RT行程更新停止时间更新来“修补”这些时间。

看起来GTFS-RT的指定非常松散,只有少数字段是强制性的。其中一个正在消费的GTFS-RT Feed,其旅行更新中有trip_id,另一个Feed没有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();

1 个答案:

答案 0 :(得分:0)

问题可能是

.andWhere('stop_times.departure_time', tripUpdate.trip_start_time)
select语句中的

子句。

gtfs规范状态时间必须是HH:MM:SS格式的八位数字(如果小时以0开头,则H:MM:SS也被接受)如果您的日程安排有时间为5 :37:00和TripUpdates中的start_time是05:37:00你的声明不会返回旅行ID。如果这是问题,你需要在" 0"之前加上这样的时间。将它们从stop_times.txt添加到数据库或者调整上面的子句时。