Опитвам се да получа пътеките част от транзитна услуга от набор от GTFS файлове. Файлът trips.txt всъщност представя маршрутите, умножени за разписанията, така че много редове за всеки път, както е документирано в GTFS документация. Как мога да получа уникални пътувания за маршрут и особено уникални връзки към спирки?
Използване на Google GTFS за получаване на уникални маршрути
Отговори (2)
Под „път“ предполагам, че имате предвид това, което на езика на GTFS е форма: физическият път, следван от транзитно превозно средство в реалния свят.
За списък с уникални пътувания за форма (ако приемем, че вашите GTFS данни са заредени в релационна база данни), имате нужда само от заявка като тази:
SELECT * FROM trips WHERE shape_id = <shape_id>;
Имайте предвид, че може да искате да филтрирате допълнително по service_id
, за да създадете списък само с пътувания през делничните дни, например.
Генерирането на списък от спирки за форма е по-трудно, тъй като няма пряка връзка между фигура и спирка в GTFS. По-скоро спирките са свързани с отделни пътувания, като таблицата stop_times
предоставя асоциацията (вижте моят отговор на "Как мога да изброя всички спирки, свързани с маршрут, използващ 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, проверявам дали редът съществува, преди да го вмъкна. И дано остане нещо в нета...