Я пытаюсь получить часть путей транзитной службы из набора файлов GTFS. Файл trips.txt фактически представляет пути, умноженные на расписания, так что много строк для каждого пути, как указано в документация по GTFS. Как я могу получить уникальные поездки по пути и особенно уникальные ссылки на остановки?
Использование Google GTFS для получения уникальных маршрутов
Ответы (2)
Я предполагаю, что под «путем» вы имеете в виду то, что на языке GTFS называется формой: физический путь, по которому следует транспортное средство в реальном мире.
Для списка уникальных поездок для формы (при условии, что ваши данные GTFS загружены в реляционную базу данных) вам нужен только такой запрос:
SELECT * FROM trips WHERE shape_id = <shape_id>;
Обратите внимание, что вы можете дополнительно отфильтровать по service_id
, например, для создания списка поездок только в будние дни.
Сгенерировать список остановок для фигуры сложнее, так как в GTFS нет прямой связи между фигурой и остановкой. Скорее, остановки связаны с отдельными поездками, а таблица stop_times
обеспечивает ассоциацию (см. -with-a-route-using-gtfs/13651120#13651120">мой ответ на вопрос "Как я могу перечислить все остановки, связанные с маршрутом, использующим GTFS?"). После того, как вы выбрали интересующую вас поездку, вы можете получить список остановок, которые она посещает, по порядку, с помощью такого запроса:
SELECT DISTINCT stop_id, code, name
FROM stop_times
INNER JOIN stops ON stops.id = stop_times.stop_id
WHERE trip_id = <trip_id>
ORDER BY stop_sequence;
Но я подозреваю, что это не то, чего вы хотите. Я подозреваю, что вы думаете (основываясь на своем опыте пассажира транспорта), что должно быть всего несколько отдельных «путей», по которым следует каждый транзитный маршрут, и вы должны быть в состоянии добраться до этого небольшого количества путей и, скажем, автоматически генерировать карту для каждого с четко обозначенными остановками. К сожалению, это не очень хорошо согласуется ни с тем, как транспортные системы работают на практике, ни с тем, как они моделируются GTFS.
Чтобы сделать то, что, как мне кажется, вы хотите сделать, вам придется
Получить список поездок по рассматриваемому маршруту (от
trips.txt
).Используя этот список, примените эвристику, чтобы определить, какие поездки эквивалентны в сознании пользователя общественного транспортапоездки, которые следуют одному и тому же «пути» (форме), путешествуют в одном направлении, посещают один и тот же или аналогичный набор останавливаться в том же порядке и работать в одни и те же дни (начиная с
calendar.txt
), например, и группировать эквивалентные поездки в группы.Для каждой корзины эквивалентных поездок создайте список остановок вместе с картами, расписаниями или описаниями по желанию.
Обратите внимание, что в целом вы можете использовать заголовок поездки, чтобы определить, по какому ответвлению маршрута она следует и, следовательно, по какому пути она пойдет и какие остановки посетит. Однако я бы не стал считать, что это полностью надежно; вам нужно будет проверить свои данные, чтобы увидеть, можете ли вы таким образом надежно группировать поездки.
Учитывая отсутствие фигур, я сгруппировал поездки на автобусе и в пункт назначения, удалив все вторые поездки с тем же автобусом и пунктом назначения. Когда я загружаю stop_times, я проверяю, существует ли строка, прежде чем вставлять ее. И я надеюсь, что что-то останется в сети...