如何使用GTFS列出停止直接连接的邻居?

时间:2014-07-16 11:17:30

标签: sql gtfs

让我们说这些州议员包含在GTFS数据中:

1. stop A is connected with stop B and stop C
2. stop B is connected with stop D and stop E
3. stop C is connected with Stop F and stop G

现在我想查询与停止A直接相关的所有站点。结果应为stop Bstop C

这些SQL查询是否可以使用GTFS数据?

1 个答案:

答案 0 :(得分:1)

是的,虽然根据您的应用程序,性能可能不是您所期望的一切。

按照您的示例,让我们调用停止A 原点停止并停止B和C 已连接停止。然后,为了建立一组连接的止损,我们想找到

的所有止损
  • 与原点停止共享旅程,

  • 在原点停留之前或之后立即访问该共享旅程。

我们可以使用stop_sequence表的stop_times字段来测试第二个条件。试试这个SQL:

SELECT DISTINCT stops.id, stops.code, stops.name
  FROM stop_times AS origin_stop
  INNER JOIN stop_times AS connected_stops
    ON connected_stops.trip_id = origin_stop.trip_id
      AND ABS(connected_stops.stop_sequence - origin_stop.stop_sequence) = 1
  INNER JOIN stops
    ON stops.id = connected_stops.stop_id
  WHERE origin_stop.stop_id = <origin stop ID>;

这会加入stops表以获得更漂亮的视图;如果你所有的应用程序都关心的是连接的停止&#39;您可以删除该加入的ID,并将第一行更改为&#34; SELECT DISTINCT connected_stops.stop_id&#34;。

为了使性能可以接受,您需要在stop_times.stop_idstop_times.trip_id上创建索引:

CREATE INDEX stop_times_stop_id_index ON stop_times(stop_id);

CREATE INDEX stop_times_trip_id_index ON stop_times(trip_id);

但是,如果您正在开发在线应用程序,这可能不是可行的方法。您最好使用内存中传输网络的图形表示来预先计算停靠点之间的连接,然后在运行时查询