Prima di tutto, un piccolo sfondo.
Lavoro per un'agenzia di transito regionale. Stiamo effettuando una "diagnostica" sul nostro servizio di autobus di alimentazione. Vorremmo sapere quale percentuale dei nostri utenti potrebbe prendere l'autobus per andare alla stazione ferroviaria invece di prendere la propria auto. È stato fatto più volte nel pass, ma ora stiamo usando gtfs come fonte di dati principale, quindi dobbiamo ripensare la nostra metodologia.
Per essere considerato "alimentare" il treno, una linea di autobus deve avere una fermata a una certa distanza da una stazione ferroviaria (buffer rosso). Inoltre, la sincronicità con il servizio ferroviario è molto importante perché se l'autobus arriva alla stazione mezz'ora prima del treno, il tempo di attesa è troppo lungo e ti consigliamo di dormire altri 20 minuti al mattino e prendere la tua auto.
Supponiamo di prendere la linea A (blu) alla fermata 12. Scendi dall'autobus alla fermata 13. L'autobus arriva alla fermata 13, che è la fermata per andare alla stazione ferroviaria n. 1 5 minuti prima del treno. È molto buono. Ciò significherebbe che tutti coloro che prendono quella linea di autobus alla fermata da 1 a 13 inclusa arriverebbero 5 minuti prima di quel treno.
Quindi, il treno, che attraversa un'area molto densamente popolata con molte scuole e incroci, è costretto a ridurre molto la sua velocità. Nel frattempo, l'autobus prende i passeggeri dalla fermata 14 a 17 e arriva alla stazione ferroviaria n. 2 10 minuti prima di quel treno. Quindi i passeggeri che prendono l'autobus dalle fermate 14 alle 17 avrebbero tutti un tempo di attesa di 10 minuti una volta arrivati alla stazione ferroviaria. Quindi, lungo quella linea di autobus, i passeggeri che prendono l'autobus alla fermata da 1 a 13 hanno un tempo di attesa di 5 minuti quando quelli che prendono l'autobus alle fermate da 14 a 17 hanno un tempo di attesa di 10 minuti.
La linea B, sull'altro lato del binario, passa vicino alla stazione ferroviaria n. 1, ma le sue fermate sono troppo lontane per considerare "l'alimentazione" della stazione ferroviaria n. 1. Arriva alla Stazione Ferroviaria # 2 7 minuti prima del treno (fallo per ogni treno durante l'ora di punta del mattino; è molto ben sincronizzato). Quindi i passeggeri lungo la linea B, prendendo l'autobus ovunque dalla fermata 1 a 59, avrebbero un tempo di attesa di 7 minuti.
Ora, la mia domanda. Una volta stabilito che le fermate LineA.13 e LineA.17 stanno alimentando il mio treno (è stato fatto spazialmente, in PostGIS) e che il tempo di attesa quando si prende l'autobus alla fermata prima del 13 è di 5 minuti, ma quelli che hanno un tempo di attesa di 10 minuti, come posso assegnare il tempo di attesa a tutte le soste prima di loro?
Mi piacerebbe farlo in Postgres / PostGIS (pl / pgsql o pl / python), ma posso usare pure python (OS o arcpy).
Potrei, credo, tornare indietro. Quindi, una volta trovata una fermata adatta (qui la riga A.17), assegnare lo stesso tempo di attesa alla fermata 16, quindi 15 ... fino a quando ho trovato un'altra fermata adatta ai miei criteri (riga A.13) e quindi assegnare il resto delle fermate, lo stesso tempo di attesa di 13.
Non ho idea di come creare un ciclo del genere però. Non credo di poterlo fare in SQL, quindi dovrei usare un linguaggio procedurale in PostgreSQL.
Ho avuto l'idea di usare pgRouting per trovare il percorso tra le fermate di ciascun alimentatore in modo che la linea A venisse divisa in due (fermate da 1 a 13 e quindi da 13 a 17). Sarebbe più facile?
Il prossimo passo sarà usare pgRouting per calcolare il tempo di guida da tutte le fermate che hanno un tempo di attesa (scusate la linea A.18 e oltre!) E confrontarlo con il programma del bus per calcolare la competitività (ci vogliono 5 minuti in più in autobus che in macchina?)
Qualche idea? Di solito pubblico un lungo script di work-in-progress per mostrare lo sforzo che ho fatto finora, ma sono bloccato!