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