IZ2VTW's Board

[WIP] Da GTFS a OpenStreetMap

2200 words - 11 min read
INFO
Traduzione del post Du GTFS à OpenStreetMap del Le blog de nlehuby

Se la tua rete di trasporto pubblico preferita ha pubblicato i suoi dati come dati aperti in GTFS e vuoi usarli per verificare la completezza di OpenStreetMap e vedere cosa può essere migliorato? Ecco alcuni suggerimenti per iniziare!

GTFS WTF?

GTFS (General Transit Feed Specification) è un formato utilizzato di frequente per descrivere i dati di trasporto. Permette di definire le caratteristiche e la geografia della rete, nonché i suoi orari. Questo formato è ampiamente utilizzato per alimentare software e servizi di pianificazione e informazione dei viaggi, nonché strumenti di pianificazione e miglioramento della rete. È quindi del tutto naturale in questa forma che potrai trovare i dati delle linee e delle fermate degli autobus pubblicati dal tuo operatore o dalla tua comunità.

Cos'è il GTFS?

Titolo

antani

CC-BY-SA Jungle Bus

Un file GTFS si presenta sotto forma di un file .zip contenente un insieme di file di testo. Nonostante la loro estensione, in realtà sono file CSV che possono essere aperti nel tuo software di foglio di calcolo preferito (LibreOffice Calc, Excel, ecc.).

La documentazione che descrive il contenuto dei file, i dettagli delle colonne e il modo in cui il collegamento tra di loro è disponibile online.

Per rendere le cose più facili, non verrà usato direttamente il file GTFS, ma un’esportazione fatta con lo strumento geografico GTFS. Ti permette di trasformare un file GTFS in un insieme di file geografici, più adatti alla nostra missione e che possono essere facilmente importati nella maggior parte degli strumenti di editing di OpenStreetMap (JOSM, iD editor, etc.).

Schermata dell'interfaccia geografica GTFS
WARNING
Come dico spesso, open data non significa open bar, quindi prima di iniziare a modificare qualsiasi cosa, controlla di poter utilizzare questi dati per arricchire OpenStreetMap.

Fase 1: le fermate

Il passaggio più semplice da eseguire è un confronto con le fermate già presenti.

Le fermate sono nel file stops.csv. Per ottenere un risultato simile da GTFS, modificare l’estensione del file in csv, rinominare le colonne stop_lat e stop_lon in latitude e longitude e quindi filtrare il contenuto per mantenere solo quelle che ne hanno una location_type = 0.

Ti consiglio di aprirlo prima in un foglio di calcolo per stimare la qualità della denominazione delle fermate (TUTTO MAIUSCOLO? Con abbreviazioni? Ecc). Controlla anche se il stop_code o stop_id corrisponde a un numero visibile sulle paline delle fermate (ad esempio un codice per ottenere i prossimi passaggi in tempo reale a questa fermata?): Se sì, questo corrisponde a dati utili da aggiungere a OpenStreetMap.

Panoramica delle fermate di un GTFS esportato con GTFS-geo

Quindi, potrebbe essere interessante visualizzarli su una mappa per un primo inventario (umap, QGIS o semplicemente JOSM con uno sfondo OSM o immagini aeree di qualità). Già questo dà una prima occhiata e può consentire di rilevare errori grossolani (fermate situate al di fuori della zona coperta dalla rete, o addirittura in mezzo al mare).

Panoramica delle fermate in JOSM
Panoramica delle fermate in JOSM
Panoramica delle fermate in JOSM

Ciò che veramente ci interessa in questa fase è la precisione del posizionamento delle fermate sulla mappa: le fermate sono posizionate sulla strada, a lato della strada o all’interno di edifici?

È inoltre necessario verificare il modo in cui vengono catalogate le fermate: infatti le fermate GTFS non corrispondono necessariamente alle fermate come le possiamo osservare sul campo. È possibile che un’unica fermata GTFS sia valida per entrambi i sensi di circolazione su una linea, anche se corrisponde a due pensiline a terra, o viceversa più fermate (una per ogni linea) per rappresentare una fermata di autobus servita da più linee.

panoramica delle fermate in JOSM

In breve, dobbiamo dedicare un po' di tempo ad esplorare i dati per identificare piccole sorprese che potrebbero rendere più complesso il nostro compito.

Una volta acquisita familiarità con le fermate GTFS, possiamo affrontare il confronto con OpenStreetMap. Per questo, possiamo ad esempio caricare il file di stop sopra questo tema MapContrib. JOSM è anche un’ottima scelta per questo compito.

panoramica delle fermate in JOSM

Se non l’hai già fatto, ti consiglio di dedicare prima un po' di tempo alla standardizzazione delle fermate già presenti in OpenStreetMap per la zona. Senza di essa, potrebbe essere difficile per te rispondere a domande molto semplici come “Quante fermate ci sono in questa città?” utilizzando OpenStreetMap. Infatti, come per il GTFS, diverse catallogazioni sono possibili, tanto sul posizionamento della fermata (su strada, o accanto ad essa) quanto sui tag: vanno quindi rispettate le pratiche locali quando esistono. Altrimenti, consiglio la seguente catalogazione, che è compatibile con la maggior parte dei rendering e degli strumenti che sfruttano i dati di trasporto OpenStreetMap: una fermata è rappresentata da un singolo oggetto, posto accanto alla strada, con i tag highway = bus_stope e public_transport = platform.

panoramica delle fermate in JOSM

Dopo questo piccolo intervallo di giardinaggio dei dati esistenti, possiamo affrontare l’arricchimento e il miglioramento delle fermate OpenStreetMap dal GTFS. Ricorda di incrociare le fonti e di fare affidamento su immagini aeree o foto di strada con licenza compatibile 😉.

Individua anche se ci sono fermate esistenti in OpenStreetMap che non sono rappresentate nei dati aperti utilizzati (ad esempio la navetta gratuita predisposta dal comune o da altra rete di trasporto diversa da quella su cui stai lavorando).

In JOSM, puoi utilizzare il plugin todo per creare un elenco di fermate e controllarle molto rapidamente in ordine.

Il plugin TODO di JOSM

Se i risultati dei passaggi precedenti sono piuttosto buoni (i dati GTFS sono di buona qualità, con nomi validi e posizioni precise e vicini alla modellazione adottata da OpenStreetMap), puoi ad esempio utilizzare il plugin JOSM Conflation per passare rapidamente a rivedere le differenze.

Il plugin Conflation di JOSM

Puoi anche creare un’analisi Osmose: è un ottimo strumento per realizzare integrazioni di dati in OpenStreetMap da una sorgente di dati aperti. Inoltre, Osmose rende più facile lavorare con più persone e in seguito seguire le modifiche apportate ai dati (sia GTFS che OpenStreetMap).

Un analisi di Osmose

Insomma, alla fine di questo passaggio, hai posizionato le fermate della rete in qualità: è già un grande risultato, complimenti! Quindi possiamo passare alle linee!

Fase 2: inventario di linee e percorsi

Modificare le linee di trasporto in OpenStreetMap è noto sia una cosa difficile, ma niente panico: con un po' di pratica e metodo non è così difficile!

Ogni linea è composta da uno o più tracciati, i quali rappresentano i percorsi effettivamente seguiti dai mezzi con le relative fermate servite in ordine. Nel caso generale, ci saranno due tracciati per ogni linea (uno per l’andata e uno per il ritorno), ma esistono molte eccezioni: la linea circolare con un unico percorso, la linea biforcuta con 3 o 4 percorsi diversi e regolari, la deviazione del mercoledì mattina per evitare la piazza del mercato o la deviazione ogni mattina e ogni sera per passare davanti alla scuola, ecc.

In OpenStreetMap, ogni percorso sarà rappresentato una relazione di type = route. Questa relazione conterrà le fermate in ordine e le strade o gli itinerari per cui passa l’autobus. Quindi raggrupperemo tutti i percorsi della stessa linea in una relazione di type = route_master.

Prima di andare oltre e guardare i dati GTFS, ti consiglio, come per le fermate, di dedicare un po' di tempo alla qualità dei dati già presenti in OpenStreetMap. In particolare, se necessario, aggiungeremo tag sulle tratte e sulle linee per indicare il vettore (operator) e la rete (network) in modo da poter facilmente differenziare le linee della nostra rete e quelle della rete nazionale o delle navette comunali. Verificheremo anche che ogni percorso sia effettivamente collegato a una linea (le relazioni route sono membri di relazione route_master) altrimenti rispondere alla domanda sul numero di linee in città potrebbe essere un’operazione difficile.

Per questo passaggio, ricordati di attivare il validatore Jungle Bus per JOSM, che ti dirà cosa correggere nei dati esistenti.

Attiva il validatore JOSM Jungle Bus

Puoi anche trovare la maggior parte di questi controlli di qualità in Osmose. Dai un’occhiata anche alla versione beta di Bifidus, che ti permette di evidenziarli su una mappa per una determinata area.

Dai un'occhiata alla versione beta di Bifidus

Ora diamo un’occhiata alle linee e ai percorsi del GTFS.

GTFS-geo ti offre un file csv contenente le rotte. Una colonna indica la linea di appartenenza e il numero di fermate.

Panoramica di linee e percorsi

In GTFS, otterrai l’elenco delle righe nel file routes.txt. Per trovare i percorsi di ogni riga, è necessario utilizzare il file trips.txt, filtrato route_id e mantenendo solo quelli che hanno la stessa sequenza di fermate (che trovate nel file stop_times.txt).

A seconda della complessità delle linee, potresti dover fare delle scelte in questi percorsi: puoi sempre concentrarti inizialmente sui percorsi più regolari (il percorso più frequente è più rilevante per la mappa rispetto alla variante che viene eseguito solo il mercoledì alle 10:30).

L’orario della linea, quando disponibile, offre una visualizzazione abbastanza efficiente dei diversi percorsi e può essere utile per identificare quelli che si desidera mappare e quelli che si salvano per dopo.

Panoramica di linee e percorsi

Dopo tutto ciò, dovresti avere una prima visione del numero di rotte e linee già esistenti in OpenStreetMap e di quelle da completare, oltre a quelle da realizzare interamente.

Per seguire i tuoi progressi, ti consiglio di aprire una pagina wiki, dove avere un elenco di linee e percorsi target e quindi misurare qui i tuoi progressi. La pagina seguente può servire come modello se non hai familiarità con la sintassi wiki.

Una tabella di avanzamento nel wiki

Questa pagina wiki è anche un buon posto per ricordare i tag giusti da mettere sulle linee (per standardizzare i tag operator e network per esempio) e come mappare le fermate.

In breve, alla fine di questo passaggio, hai una panoramica della tua rete: le linee e i percorsi esistenti e quelli da creare. Daremo ora uno sguardo dettagliato ad ogni percorso uno per uno e lo completeremo.

Fase 3: i percorsi e le loro soste

Quindi prendiamo un percorso: in GTFS Geo, ogni percorso è associato a un file geojson, che include metadati, fermate e tracciato del percorso.

In GTFS, otterrai i metadati del viaggio unendo le informazioni dai file routes.txt e trips.txt utilizzando la colonna route_id per bloccare ogni viaggio nella sua riga. I viaggi presenti in trips.txt hanno l’informazione di orario e calendario associati, quindi probabilmente dovrai prima scegliere un singolo viaggio rappresentativo. L’elenco delle fermate del viaggio è disponibile nel file stop_times.txt utilizzando come filtro trip_id. Infine, dovrai anche usare stop_id per trovare nel file stops.txt il nome e le coordinate di queste fermate.

È quindi possibile aprire il file geojson in JOSM per visualizzare un percorso.

Un viaggio in JOSM

È quindi necessario prendere la relazione del percorso associato o crearlo se necessario utilizzando le informazioni fornite dal GTFS. Non dimenticare di mettere la relazione del tragitto (type = route) nella relazione associata (type = route_master).

Quindi, seguendo il geojson, tutto quello che devi fare è trovare le fermate (già create in OpenStreetMap al passaggio 2) e aggiungerle, nell’ordine in cui sono presenti nella relazione.

Aggiungi le fermate nella relazione con JOSM

Infine, prima di passare al percorso successivo o al passaggio successivo, non dimenticare di aggiornare il wiki man mano che procedi.

Andamento dei giudizi sul wiki

Fase 4: i percorsi

Oltre alle fermate per ogni percorso, vorremo aggiungere anche il percorso, che si materializza in OpenStreetMap dopo le strade utilizzate dal bus.

In GTFS Geo, questa rotta è presente nel file geojson di ogni rotta. Il layout è un’informazione facoltativa nel GTFS: quando non è fornito, il geojson conterrà solo linee rette che collegano le fermate in ordine.

Un viaggio in JOSM

In GTFS, otterrai i possibili grafici delle rotte dal file shapes.txt. Questa è una serie di punti che dovrai collegare. È possibile collegare il tragitto alla rotta GTFS utilizzando la colonna shape_id del file shapes.txt e trips.txt. Il file shapes.txtè facoltativo. Se non è previsto, sta a te trovare il percorso intrapreso dal mezzo tra le fermate! (ndt Ricordati di verificare i percorsi sul posto 😉)

Per aggiungere questo percorso in OpenStreetMap, apri la relazione del percorso, quindi seleziona una per una le strade e aggiungile alla relazione.

Se hai molti percorsi o code particolarmente lunghe, ti invito a testare alcuni plugin JOSM:

  • PT Assistant e il suo assistente di routing. Questo plugin è essenziale anche per mappare le linee di trasporto in JOSM: aggiunge molti test di qualità e facilita la visualizzazione di oggetti importanti. Provarlo, lo adotterai!
  • Relation Toolbox , che consente di velocizzare l’aggiunta di più oggetti a una relazione
Il plug-in PT Assistant

Il plugin PT Assistant rende molto più facile (tra le altre cose) visualizzare il percorso dell’autobus selezionato, le sue fermate, il loro ordine e il percorso.

E infine, quando è finito, il wiki deve essere aggiornato di conseguenza come per le fermate.

Avanzamento dei percorsi sul wiki

Fase 5: divertiti!

Hai creato tutte le fermate, poi tutte le linee e tutti i percorsi e infine hai aggiunto le fermate e le strade a tutti questi percorsi? Congratulazioni!

Ora puoi trovare questi dati sui rendering di trasporto di openstreetmap.org (a volte ci sono diversi giorni di ritardo, sii paziente).

Progressi sullo sfondo dei trasporti

I dettagli delle informazioni di ogni riga possono essere esplorati anche da Unroll:

Unroll, per visualizzare i dettagli di una linea

Dai un’occhiata anche all’app mobile OSMAnd, che ti consente anche di navigare tra questi dati di trasporto e persino di calcolare i percorsi degli autobus!

E non è tutto, ci sono sempre più siti o app che utilizzano i dati di trasporto OpenStreetMap: dai un’occhiata alla pagina wiki di riferimento per cose ancora più interessanti da fare con questi nuovi dati!

Updated: 2020-09-22 05:15:23 +0200 +0200 - Modifica la pagina
Commit: ":sparkles: Add new IT post about GTFS in OSM (to review)" [630ab46]
By: Francesco Vezzoli <fvezzoli@villavasco.ovh>