如何使用 GTFS 查找与停靠点关联的路线?

How do I find the routes associated with a stop using GTFS?

所以我正在构建一个中转应用程序,它为我提供了一个 stop_id 数据库。我如何找到停靠的公交车? 例如:10 路和 23 路公交车经过 stop_id# 1234 我试过下面的查询,但它每次只给我提供一辆公共汽车

select distinct r.route_short_name
from routes r, trips t, stop_times st
where r.route_id = t.route_id
and t.trip_id = st.trip_id
and st.stop_id = 

我检查了我的 gtfs 文件,发现 stop_id# 1234 有两条不同的总线为其服务。我也在没有 DISTINCT 的情况下尝试过它,它只是重复列出相同的总线。任何 comments/help/ideas 都表示赞赏。

您的想法是正确的,但您应该改为将表连接在一起。试试这个:

SELECT DISTINCT r.route_short_name
    FROM stop_times st
    INNER JOIN trips t ON t.trip_id = st.trip_id
    INNER JOIN routes r ON r.route_id = t.route_id
    WHERE st.stop_id = <stop_id>;

为了获得良好的性能,请确保您有 stop_times 索引以允许通过站点 ID 快速查找行程:

CREATE INDEX stop_times_stop_id_trip_id_index ON stop_times(stop_id, trip_id);

如果您还没有定义route_idtrip_id作为它们各自表的主键,您需要为它们创建索引还有:

CREATE INDEX routes_route_id_index ON routes(route_id);
CREATE INDEX trips_trip_id ON trips(trip_id);