Перш за все, трохи тла.
Я працюю в регіональному транзитному агентстві. Ми робимо "діагностику" щодо нашої служби подачі автобусів. Ми хотіли б дізнатися, яка частка наших користувачів могла взяти автобус, щоб поїхати на залізничний вокзал замість того, щоб їхати на вагоні. Це було зроблено декілька разів, але ми зараз використовуємо gtfs як основний джерело даних, тому нам доведеться переосмислити нашу методологію.
Щоб вважатись "годуванням" поїзда, автобусний маршрут повинен мати зупинку на певній відстані від залізничного вокзалу (червоні буфери). Також синхронність із послугою поїзда є дуже важливою, тому що якщо ваш автобус приїжджає на залізничний вокзал за півгодини до поїзда, час очікування занадто довгий, і вам захочеться спати ще 20 хвилин вранці та сісти на машину.
Скажімо, ви їдете на лінії зупинки 12. Блакитна. Ви зупиняєтесь на автобусі на зупинці 13. Автобус прибуває на зупинці 13, яка є зупинкою, щоб їхати до залізничного вокзалу №1 за 5 хвилин до поїзда. Це дуже добре. Це означає, що кожен, хто їде на автобусному маршруті на зупинці від 1 до 13, прибуде за 5 хвилин до цього поїзда.
Тоді поїзд, проходячи через дуже густонаселену територію з безліччю шкіл та переїздів, змушений значно зменшити швидкість. Тим часом автобус підбирає пасажирів на зупинці 14 до 17 та прибуває на залізничний вокзал №2 за 10 хвилин до цього поїзда. Таким чином, пасажир, який їде в автобусі на зупинках 14 - 17, матиме час очікування 10 хвилин, як тільки приїде на залізничну станцію. Так, на цій автобусній лінії пасажири, які їдуть на автобусі на зупинці 1 - 13, мають тривалість очікування 5 хвилин, коли ті, хто їде в автобусі на зупинках 14 - 17, мають час очікування 10 хвилин.
Лінія В, з іншого боку колії, проходить біля залізничного вокзалу №1, але її зупинки занадто далеко, щоб розглянути можливість "годування" залізничного вокзалу №1. Він прибуває на залізничний вокзал №2 за 7 хвилин до поїзда (робити це для кожного поїзда протягом ранкової години пік; він дуже добре синхронізований). Тож пасажири по лінії В, їхавши на автобусі скрізь від зупинки 1 до 59, мали б час очікування 7 хвилин.
Тепер моє запитання. Після того, як я визначив, що зупинки LineA.13 і LineA.17 подають мій потяг (це було зроблено просторово, в PostGIS), і що час очікування під час руху автобуса на зупинці до №13 становить 5 хвилин, але після закінчення час очікування - 10 хвилин, як я можу призначити час очікування на всю зупинку перед ними?
Я хотів би зробити це в Postgres / PostGIS (pl / pgsql або pl / python), але я можу також використовувати чистий python (ОС або arcpy).
Я міг би, я думаю, петлю назад. Отже, як тільки я знайшов зупинку, яка підходить (тут LineA.17), призначте той самий час очікування для зупинки 16, потім 15 ..., поки я не знайшов ще одну зупинку, яка відповідає моїм критеріям (LineA.13), а потім призначити решту з зупинок, той самий час очікування, що і 13.
Я навіть не маю уявлення, як створити таку петлю. Я не думаю, що я можу це зробити в SQL, тому мені доведеться використовувати процедурну мову в PostgreSQL.
У мене виникла ідея використовувати pgRouting для пошуку маршруту між кожною зупинкою подачі, щоб таким чином лінія А була розділена на дві частини (зупинки від 1 до 13, а потім від 13 до 17). Це було б простіше?
Наступним кроком буде використання pgRouting для обчислення часу їзди з усіх зупинок, які мають час очікування (вибачте за LineA.18 і більше!) Та порівняйте це з графіком руху автобуса для розрахунку конкурентоспроможності (чи потрібно 5 хвилин більше в автобусі, що в машині?)
Будь-які ідеї? Я зазвичай розміщую довгий сценарій незавершеного виробництва, щоб показати зусилля, які я доклав до цього часу, але я застряг!