Фидер автобус


9

Прежде всего, немного фона.

Я работаю в региональном транзитном агентстве. Мы проводим «диагностику» нашего фидерного автобуса. Мы хотели бы знать, какая часть наших пользователей может сесть на автобус, чтобы добраться до железнодорожного вокзала, вместо того, чтобы брать их на машине. Это было сделано несколько раз за раз, но теперь мы используем gtfs в качестве основного источника данных, поэтому нам нужно переосмыслить нашу методологию.

типичное фидерное автобусное сообщение

Чтобы считаться «кормящим» поездом, автобусный маршрут должен иметь остановку на определенном расстоянии от железнодорожной станции (красные буферы). Кроме того, синхронность с железнодорожным сообщением очень важна, потому что, если ваш автобус прибывает на железнодорожную станцию ​​за полчаса до поезда, время ожидания слишком велико, и вы захотите поспать еще 20 минут утром и забрать свою машину.

Допустим, вы берете линию А (синюю) на остановке 12. Вы выходите из автобуса на остановке 13. Автобус прибывает на остановку 13, которая является остановкой, чтобы добраться до железнодорожного вокзала № 1 за 5 минут до поезда. Это очень хорошо. Это означало бы, что все, кто ходит по этому автобусному маршруту на остановке с 1 по 13 включительно, прибудут за 5 минут до этого поезда.

Затем поезд, проходящий через очень густонаселенный район с множеством школ и переездов, вынужден сильно снизить скорость. Между тем, автобус принимает пассажиров на остановках с 14 по 17 и прибывает на железнодорожный вокзал № 2 за 10 минут до этого поезда. Таким образом, пассажир, садящийся в автобус на остановках с 14 по 17, будет ждать 10 минут после прибытия на вокзал. Таким образом, вдоль этой автобусной линии пассажиры, садящиеся на автобус на остановках 1-13, имеют время ожидания 5 минут, тогда как пассажиры, садящиеся на автобус на остановках 14-17, имеют время ожидания 10 минут.

Линия B, на другой стороне пути, проходит около Железнодорожного вокзала № 1, но ее остановки слишком далеко, чтобы рассмотреть возможность «кормления» Железнодорожного вокзала № 1. Он прибывает на вокзал № 2 за 7 минут до поезда (делайте это для каждого поезда в утренний час пик; он очень хорошо синхронизирован). Таким образом, пассажиры по линии B, которые сядут на автобус повсюду от остановки 1 до 59, будут ждать 7 минут.

Теперь мой вопрос. Как только я определил, что остановки LineA.13 и LineA.17 питают мой поезд (это было сделано пространственно, в PostGIS), и что время ожидания при посадке на автобус до остановки № 13 составляет 5 минут, а после время ожидания 10 минут, как я могу назначить время ожидания всем остановкам перед ними?

Я хотел бы сделать это в Postgres / PostGIS (pl / pgsql или pl / python), но я также могу использовать чистый python (OS или arcpy).

Я думаю, я мог бы вернуться назад. Итак, как только я нашел подходящую остановку (здесь LineA.17), назначьте то же время ожидания для остановки 16, затем 15 ..., пока я не нашел другую остановку, которая соответствует моим критериям (LineA.13), а затем назначьте остальные из остановок, то же время ожидания, что и 13.

Я понятия не имею, как создать такой цикл, хотя. Я не думаю, что я могу сделать это в SQL, поэтому мне пришлось бы использовать процедурный язык в PostgreSQL.

У меня была идея использовать pgRouting, чтобы найти маршрут между остановками каждого фидера, чтобы линия А была разбита на две части (остановки с 1 по 13, а затем с 13 до 17). Это будет проще?

Следующим шагом будет использование pgRouting для расчета времени вождения от всех остановок, у которых есть время ожидания (извините до LineA.18 и более!) И сравнение этого с расписанием автобуса для расчета конкурентоспособности (это занимает 5 минут больше в автобусе, что в машине?)

Любые идеи? Обычно я выкладываю длинный сценарий незавершенного производства, чтобы показать усилия, которые я уже приложил, но я застрял!


Из-за других странных случаев я теперь рассматриваю сокращение маршрутов, где пассажиры могут выйти из автобуса. Итак, каждый маршрут «сегментов» будет независимым. Мне все еще нужно выяснить, как я могу обрезать свои фигуры в PostGIS, когда мои остановки не топологически правильны (фигуры следуют за улицей, а остановки на полюсе) ...;)
fgcartographix

Ответы:


3

На самом деле создать нужный цикл действительно легко с SQL:

SELECT DISTINCT ON (b1.line, b1.number) b1.line,b1.number,b2.waiting
FROM busstops AS b1
  LEFT JOIN busstops AS b2
    ON b1.line = b2.line
      AND b1.number<=b2.number
      AND b2.waiting IS NOT NULL
ORDER BY b1.line,b1.number,b2.number;

Скрипки .

Также было бы легко, скажем, суммировать время передачи от остановки к остановке.

И вы можете использовать обычную pgRouting, если только вам удастся преобразовать маршруты во временный график (с узлами, представляющими время отправления и время для стоимости маршрута).


Woot! Это работает ... Есть еще части, которые я не понимаю, но я понял ... Могу ли я быть достаточно смелым, чтобы спросить, можно ли переопределить время ожидания, если на более поздней остановке будет меньше время ожидания? Теория заключается в том, что вы можете пропустить первую железнодорожную станцию, если вам придется ждать на платформе 20 минут и оставаться в автобусе до железнодорожной станции 2, если ожидание составляет всего 4 минуты ...;) Спасибо миллион раз !!!
fgcartographix

1
Просто измените ORDER BYпункт. Первые два столбца должны остаться, поскольку они находятся в DISTINCT ONпредложении, но в остальном все разрешено: sqlfiddle.com/#!1/24fab/2
Якуб Кания

Вы волшебник! :) Спасибо! Я боролся с этим слишком долго!
fgcartographix

Просто убедитесь, что 4 минуты не для поезда, который час спустя :)
Якуб Кания

Неа! Максимально допустимое время ожидания составляет 30 минут, и даже при этом есть большой красный символ, говорящий, что это действительно не хорошо! ;) Еще раз спасибо! Кроме того, я выиграл у моего босса свою точку зрения, что никто на самом деле не собирается оставаться в автобусе, может быть, на 20 минут дольше, чтобы доехать до железнодорожного вокзала дальше, чем первый, даже если время ожидания действительно больше. ;)
fgcartographix

5

В прошлогодней программе Google Summer of Code студент реализовал функцию pgRouting для мультимодальной маршрутизации. Это не вошло в новую версию 2.0, так что, вероятно, сейчас это не работает, но вы можете взглянуть на доступные ресурсы, чтобы узнать, полезно это или нет:

Было бы неплохо добавить эту функцию в следующий выпуск, поэтому, пожалуйста, свяжитесь с разработчиком списка рассылки для координации необходимой работы на тот случай, если вам интересно: http://pgrouting.org/support.html

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.