如何使用 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_id
和trip_id
作为它们各自表的主键,您需要为它们创建索引还有:
CREATE INDEX routes_route_id_index ON routes(route_id);
CREATE INDEX trips_trip_id ON trips(trip_id);
所以我正在构建一个中转应用程序,它为我提供了一个 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_id
和trip_id
作为它们各自表的主键,您需要为它们创建索引还有:
CREATE INDEX routes_route_id_index ON routes(route_id);
CREATE INDEX trips_trip_id ON trips(trip_id);