OpenStreetMap

Preparare un import di toponimi

Posted by Cascafico on 11 May 2017 in Italian (Italiano)

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

Login to leave a comment