OpenStreetMap logo OpenStreetMap

Cascafico's Diary

Recent diary entries

Problema: la locale sede del CAI ha molte foto georeferenziate dei segnavia sentieri e vuole inserire le informazioni in Openstreetmap.

  1. installare exiftool sudo apt-get install exiftool

  2. creare il file csv da importare su umap con exiftool exiftool -filename -gpslatitude -gpslongitude -n -csv segnavia.csv

  3. mandare in qualche server i file delle foto; per esempio: sftp -P <porta di solito 22> www-data@pippo.zapto.org:/var/www/osm/cai/files «< $’put /root/Desktop/cai/out.csv’

  4. caricare come layer csv in umap e customizzare per un Level0 l’inserimento come nodi OSM

Preparare un import di toponimi

Posted by Cascafico on 11 May 2017 in Italian (Italiano). Last updated on 15 May 2017.

Intro

La regione Friuli Venezia Giulia apre i dati dei toponimi orografici, una tabella di circa 8.000 nodi in cui appaiono i campi latitudine, longitudine, toponimo, comune di appartenenza.

Il problema è preparare un import nel DB Openstreetmap nel quale si suppone gran parte di tali toponimi siano già esistenti.

Metodo

Eseguire un geocoding su OSM e filtrare la tabella mantenendo le righe che non contengono corrispondenze.

Strumenti

  • csvgeocode permette di ottenere le coordinate a partire dal nome, gestendo la consultazione di Nominatim (server dei nomi di Openstreetmap) per ogni riga di una tabella csv. Istalliamo: > sudo apt-get install npm
    > sudo npm install -g csvgeocode
    e, per alcuni sistemi,
    > sudo ln -s /usr/bin/nodejs /usr/bin/node

  • Nominatim la cui API restituisce le coordinate geografiche in base alla eventuale corrispondenza del nome.

Dati

La tabella toponimi_orografici.csv potrebbe per esempio contenere:

lat,lon,toponimo,comune
46.594043,12.784886,Bosco Suttul,Forni Avoltri
46.591637,12.787770,Buialecis,Forni Avoltri
46.590845,12.792660,Buialecis,Forni Avoltri
[…]

Avremo cura di rinominare le intestazioni relative alle coordinate, perchè non siano riscritte da csvgeocode:

xlat,xlon,toponimo,comune
46.594043,12.784886,Bosco Suttul,Forni Avoltri
46.591637,12.787770,Buialecis,Forni Avoltri
46.590845,12.792660,Buialecis,Forni Avoltri
[…]

Riga di comando

csvgeocode toponimi_orografici.csv out.csv \ –handler osm \
– delay 1000 \
–verbose \ –url “http://nominatim.openstreetmap.org/search?q={{toponimo}},{{comune}}&format=json&viewvbox=12.3,46.68,13.95,45.54”

”–handler osm” definisce il servizio di ricerca Nominatim, che prevede la possibilità di inserire oltre alla query anche dei parametri di ricerca; nell’esempio sopra, il comune e la bounding box della regione.
“–delay 1000” definisce il ritardo tra le richieste, secondo la policy per Nominatim

Risultati

Otteniamo la tabella out.csv:

xlat,xlon,toponimo,comune,lat,lng
46.594043,12.784886,Bosco Suttul,Forni Avoltri,,
46.591637,12.787770,Buialecis,Forni Avoltri,46.592597,12.7920874
46.590845,12.792660,Buialecis,Forni Avoltri,46.592597,12.7920874
46.579674,12.781615,Canale di Gorto,Forni Avoltri,,

csvgeocode ha aggiunto e valorizzato (laddove Nominatim trova corrispondenza) i campi “lat” e “lng”.

TODO

Ora possiamo filtrare la tabella con il nostro strumento preferito e prepararci ad importare. Potremmo per esempio usare Qgis per eliminare le righe che hanno coordinate da Nominatim (cioè quelle degli elementi già in OSM) e magari discriminare tutte le righe che iniziano per “Monte “ dal resto dei toponimi, in modo da otterene diverso tag per l’importazione (natural=peak piuttosto che place=locality).

Un esempio per il “calcolatore di campi” di Qgis:
CASE WHEN “toponimo” LIKE ‘Monte %’ THEN ‘natural=peak’ else ‘place=locality’ END

Trasporti urbani di Gorizia

Posted by Cascafico on 12 July 2016 in Italian (Italiano). Last updated on 21 July 2016.

Riprendo ancora questo tema.

Raccolta dei dati

Fermate (GTFS stops.txt)

Query ovepass per la “Rete del Trasporto Pubblico Urbano di Gorizia” dell’operatore “APT”

Viaggi (GTFS trips.txt)

Devo estrarre la sequenza di fermate per ogni linea.
1: Sant’andrea - Montesanto
1: Montesanto - Sant’Andrea

eccetera.

Per la linea from=Montesanto ottengo la sequenza
ref 07002 07040 …
07032 07035 CIP05 07213

devo verificare in OSM perchè sembra che si tratti del viaggio opposto (infatti la fermata iniziale 07002 è a Sant’Andrea. Da invertire l’ordine nella relazione.

Sistemato, posso elaborare con spreasheet…

trip_id,arrival_time,departure_time,stop_id,stop_sequence
61,,,07213,1
61,,,CIP05,2
61,,,07035,3
61,,,07032,4

61,,,07038,16
61,,,07039,17
61,,,07040,18
61,,,07002,19

Be’ qua il lavoro comincia a farsi tosto e noioso… Perché non provare gtfs-editor? É open source, le procedure sono guidate e mi permette di creare da mappa, con un riscontro decisamente più immediato.

gtfs-editor

  • Tengo utile la query che mi elenca le fermate e le relative coordinate
  • creo un Agenzia ed una route con un paio di fermate cliccate a caso sulla mappa
  • esporto un gtfs giusto per avere un template dove inserire le vere fermate della query
  • adatto gli header del CSV ed importo il gtfs modificato. A questo punto ho tutte le fermate sulla mappa
  • rinuncio alla query delle relazioni OSM, a favore del clicca su mappa la sequenza (trip)
Location: Case dell'Eremita, Gorizia, Friuli-Venezia Giulia, 34170, Italia

Transit APT

Posted by Cascafico on 28 June 2016 in Italian (Italiano). Last updated on 5 July 2016.

Inizio a compilare i file GTFS per l’Azienda Provinciale Trasporti (APT - Gorizia) con qualcosa di semplice: i collegamenti aeroportuali.

Fonte il volantino dell’azienda dei Collegamenti Aeroporto Estate 2016, dove non viene definita nessuna licenza all’uso (o almeno non ne ho intravisto la definizione)-

Inserito alcune fermate e creo relazioni con JOSM; un utile strumento per verificare questa attività è overpass: questa query evidenzia la linea ref=1 della network=”Rete del Trasporto Pubblico Urbano di Gorizia”.

Poi comincio a raccogliere i dati per il file stops.txt con la seguente Overpass query

MI vengono restituite le seguenti linee:

ref:apt,name,@lat,@lon
20605,Grignano Miramare,45.7068082,13.7159159
20608,Piazza della Libertà,45.6571277,13.7722080
01629,capolinea APT,45.8207708,13.4838185
20106,Duino Centro,45.7733263,13.6044971
12029,Monfalcone,45.8086023,13.5326253
20110,Sistiana,45.7713633,13.6373722

Standardizzo lo header con
stop_id,stop_name,stop_lat,stop_lon
compilando quindi il file stops.txt

Il tag OSM “ref:apt” (che diventa GTFS “stop_id”) sembra univoco per tutta APT; TODO: verificare le altre sue linee, per non avere duplicati.

Inserisco le date di inizio e fine validità in calendar.txt dai dati APT

Per i codici dei viaggi riporto quelli APT (anche questi sembrano univoci) compilando “trip_id” di trips.txt

Per i codici delle linee riporto quelli APT, compilando la colonna “route_short_name” di routes.txt

Transit a Udine

Posted by Cascafico on 6 June 2016 in Italian (Italiano). Last updated on 22 June 2016.

Note per la creazione di un feed GTFS che mi servità per “alimentare” un’istanza di Open Trip Planner

Osservo la struttura dei file template da preparare; inizio dalle fermate (stops.txt):

  • stop_id,stop_name,stop_desc,stop_lat,stop_lon,stop_url,location_type,parent_station
  • S1,Mission St. & Silver Ave.,The stop is located at the southwest corner of the intersection.,37.728631,-122.431282,,,

Creo una query overpass per estrarre i dati delle fermate della linea 4 nel formato standard come quello sopra (poi dovrò anche rinominare i nomi dei campi della prima riga).

Ottengo:

  • ref,name,@lat,@lon header che modifico in…
  • stop_id,stop_name,stop_lat,stop_lon
  • 391,Roma / Torino,46.0487494,13.1928968
  • 389,Roma / Novara,46.0474911,13.1972403
  • 391,Roma / Torino,46.0485943,13.1937346
  • 381,Via Lignano / Santa Caterina,46.0457494,13.1972616

Purtroppo ad Udine il riferimento (in OSM tag “ref”) delle fermate ai due lati della strada è unico ed il GTFS non accetta duplicati come il qui sopra “391”.

Soluzione 1: ricorro ad excel “rimuovi duplicati” oppure a linux “sort uniq” e rinuncio alle coordinate di una delle due fermate.

Soluzione 2; ricorro ad un foglio elettronico, ordino per fermata, inserisco una nuova fermata dove applico la formula =SE(B1=B2;CONCATENA(B2;”a”);B2)

in questo modo ottengo, per esempio:

111,111,Via Cividale / Albona,46.0690524,13.2474479 111a,111,Via Cividale / Albona,46.0690138,13.2470564

Poi compilo i file “required”, secondo le direttive

  • agency.txt una o più aziende erogatrici dei dati del servizio

  • stops.txt (vista sopra) fermate, ovvero singole posizioni dove i veicoli prendono e lasciano le persone

  • routes.txt percorsi di transito. un percorso è un gruppo di viaggi elencati ai passeggeri come singolo servizio

  • trips.txt viaggi per ogni percorso. un viaggio è una sequenza di due o più fermate (stops) che avvengono ad una data ora

  • stop_times.txt ora in cui un veicolo arriva e parte da una fermata per ogni viaggio; questa è la compilazione più onerosa, per la quale uso una mappa cliccabile a supporto

  • calendar.txt Date per gli ID del servizio, su orario settimanale. specifica quando un servizio inizia e finisce, come pure i giorni della settimana in cui è attivo

  • TODO come opzione si può creare un shapes.txt, utile a disegnare meglio i “trips”, altrimenti linee rette che collegano le fermate in sequenza; su produce un kml con umap e si elabora con kml2gfs . Non capisco perchè non possano essere disegnati come la parte pedonale, che usa i dati vettoriali OSM (forse son la versione non jar si può configurare)

Finito questo lavorone, si zippa tutto e si lancia nella stessa cartella…

java -Xmx512M -jar otp-0.14.0.jar –build C:\utils\otp –inMemory –securePort 8100

Io ho usato otp-0.14.0.jar, invece del “latest”, perchè quest’ultimo non era compatibile con in mio “vecchio” software Java (JVM)

Visto che l’Istituto Centrale per il Catalogo Unico delle Biblioteche Italiane ha da tempo liberato i dati anagrafici delle biblioteche, o pensato di importarli in Openstreetmap.

Le etichette utili sono:

  • codice-isil
  • denominazione
  • indirizzo
  • cap
  • comune
  • latitude
  • longitude
  • telefono
  • fax
  • email
  • url

Come spesso accade, la qualità del dataset non è di un livello compatibile con Openstreetmap, in quanto le coordinate geografiche sono imprecise (da pochi a centinaia di metri). Ho creato una umap perchè intendo importare tramite un processo manuale assistito.

La umap ha due strati con i quali si interagisce tramite dei pop-up.

Farmacie in Friuli Venezia Giulia

Posted by Cascafico on 19 November 2015 in Italian (Italiano). Last updated on 26 January 2016.

Il Ministero della Salute ha aperto i dati delle farmacie italiane

Problemi:

  • indirizzi non standardizzati (C. Battisti, Battisti Cesare, P.zza Liberta’, Papa Giovanni XXIII, ecc)

  • coordinate raramente corrette, frutto di geocoding non precisato

Soluzioni attuate (per il Friuli Venezia Giulia):

  • (eliminazione virgola dal campo INDIRIZZO)

  • filtro del csv originale per DESCRIZIONEREGIONE e DATAFINEVALIDITA

  • eliminazione duplicati per CODICEIDENTIFICATIVOFARMACIA

  • standardizzazione con direttive ISTAT (Cesare Battisti, Piazzale Libertà, papa Giovanni Ventitreesimo, ecc)

  • prerequisito per il geocoding preciso: [numeri civici regionali importati] (http://wiki.openstreetmap.org/wiki/Friuli_Venezia_Giulia/Import_Civici_FVG)
  • geocoding con csvgeocode (grazie Napo), risultato in tabella

Quality Assurance:

  • creazione della umap farmacie FVG con layer “geocoded”, alimentato dalla relativa tabella e “preesistenti”, alimentato query overpass amenity=pharmacy nei confini regionali

  • creazione popup per facilitare il copincolla sugli editor OSM (ie: JOSM)

Inserimento in OSM

  • csv > Qgis > shp

  • JOSM plugin “open data” per leggere shp

  • adattare i tag (ie: PARTITAIVA > ref:vatin)

  • conflation in JOSM

in alternativa, se le farmacie mancanti non sono molte:

  • umap individuare le palette blu (geocoded) senza il pallino verde (preeesistenti in OSM) ed aprire l’area inquardrata in iD oppure JOSM (espandere menu a sinistra)

TODO

  • per risultato univoco del geocoding, inserire nella ricerca anche il CAP (o più lento, DESCRIZIONEPROVINCIA); verificare nominatim

Serverino TMS FVG

Posted by Cascafico on 27 April 2012 in Italian (Italiano).

Ciao forum! Lascio per qualche settimana un server TMS per alcune zone del Friuli. E’ un android di fascia bassa: lasciate qualche commento sulle prestazioni.

Di default sovrappone il mio rendering ed addende varie (tra cui Corine landcover) ai dati OSM con rendering Mapnik; la numerazione delle tile è Openlayers, per cui non va bene per chi usa JOSM. Prossimamente, se le prestazioni sono decenti, produrrò anche la numerazione per JOSM e copertura San Daniele, Cordoipo, Palmanova, Risorgive.

Udine - Cividale

Location: 46.060, 13.230

Start!

Posted by Cascafico on 10 February 2011 in Italian (Italiano).

Oggi ho iniziato a mappare! Dopo infruttuosi tentativi via Portlatch a causa di una connessione non molto veloce, ho scoperto JOSM e debbo dire che l'applicativo è molto ben studiato per la collaborazione. Avevo una certa esperienza in altro applicatvo GIS sviluppato in Java, OpenJump e JOSM è altettanto efficiente.

Location: Borgo di Ponte, Cividale del Friuli, Udine, Friuli-Venezia Giulia, 33043, Italia