我正在消费几种不同的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();
答案 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添加到数据库或者调整上面的子句时。