Как найти маршруты, связанные с остановкой, с помощью 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, и он просто неоднократно перечисляет одну и ту же шину. Любые комментарии/помощь/идеи приветствуются.


person Masterofawesome    schedule 15.07.2015    source источник


Ответы (1)


Идея у тебя правильная, но вместо этого тебе следует соединить столы вместе. Попробуй это:

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, чтобы обеспечить быстрый поиск поездок по идентификатору остановки:

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);
person Community    schedule 16.07.2015
comment
Спасибо за ответ! Я попробовал присоединиться и все еще получаю только один маршрут. :( - person Masterofawesome; 16.07.2015
comment
Интересный. Сегодня утром я проверил это на своем собственном наборе данных и получил правильный результат. Можете ли вы опубликовать пакет GTFS (файл ZIP) где-нибудь, чтобы я мог его взять? - person ; 16.07.2015
comment
Да. Это открытые данные, так что я смогу. Ссылка: vta.org/getting-around/gtfs-info/ файл данных - person Masterofawesome; 16.07.2015
comment
Отлично. Я посмотрю на это сегодня вечером. - person ; 16.07.2015
comment
Большое спасибо за помощь! - person Masterofawesome; 16.07.2015
comment
Я тоже получаю один результат: маршрут 31. Почему вы считаете, что эту остановку обслуживает более одного маршрута? - person ; 17.07.2015
comment
Для сравнения попробуйте выполнить тот же запрос для остановки с идентификатором 100. - person ; 17.07.2015
comment
Спасибо за помощь!! В конце концов, я получил более одного маршрута! Я просто неправильно прочитал файл GTFS. Ха-ха - person Masterofawesome; 17.07.2015