Italy/Howto/Estrarre poligono

From OpenStreetMap Wiki
Jump to navigation Jump to search

In questa pagina illustreremo come estrarre dati dal planet di OpenStreetMap, utilizzando come delimitatore dell'area da estrarre un poligono. Ciò è molto utile se ci interessa per esempio estrarre tutti i dati in una certa area (un comune, una provincia, una nazione, un parco naturale o un'area archeologica), per fini di rendering o per fini puramente statistici.

Ottenere i dati in formato OSM

Il punto di partenza è scaricare il confine dell'area che ci interessa in formato .osm. È possibile farlo:

  • interrogando XAPI con wget, con curl o con JOSM tramite il menù File / Apri indirizzo URL...

oppure:

  • inquadrando l'area di interesse in JOSM tramite il menù File / Scarica da OSM...

oppure:

È necessario usare gli estratti se la zona di interesse supera i limiti permessi dai metodi precedenti per estensione o per quantità di dati (ma in genere gli estratti sono troppo grandi per essere aperti direttamente con JOSM).

Ottenere i confini in formato OSM

Scaricare entro un'area che non esiste

Se intendiamo estrarre i dati presenti entro un confine che non esiste, possiamo tracciare questo confine e salvarlo in un nuovo layer. Per farlo, dopo aver scaricato l'area:

  • creare un nuovo livello (File / Nuovo livello), i dati scaricati precedentemente rimangono visibili in trasparenza;
  • selezionare lo strumento di disegno;
  • disegnare una linea chiusa ed attribuirle i seguenti tag: polygon_filename = nome.poly e polygon_id = 1;
  • fare click con il tasto destro sul livello che contiene la linea e selezionare Salva come...;
  • selezionare dalla finestra che appare come estensione .osm e dare un nome indicativo al file (nel nostro esempio confine_comune).

Scaricare entro un confine esistente

Se intendiamo estrarre i dati presenti entro un confine esistente (per esempio, un confine comunale, un parco naturale o simili), procedere come segue:

  • i dati scaricati in JOSM devono contenere tutti i confini dell'area che ci interessa;
  • eliminare tutte le informazioni diverse dalla linea di confine (strade, punti ecc), eventualmente usando lo strumento Cerca;
  • selezionare tutte le linee di confine usando lo strumento Cerca, oppure selezionarle una per una tenendo premuto CTRL e facendo click su ogni linea;
  • premere C per unire tutte le linee in una unica (confermando eventuali richieste di cambiamento di direzione);
  • dopo averle selezionate tutte, cancellare tutti i tag e tutte le relazioni;
  • inserire per questa nuova unica linea i seguenti tag: polygon_filename = nome.poly e polygon_id = 1;
  • fare click con il tasto destro sul livello corrente e selezionare Salva come...;
  • selezionare dalla finestra che appare come estensione .osm e dare un nome indicativo al file (nel nostro esempio confine_comune).

PS: Si ricorda che la relazione della Repubblica italiana è la n° 16240.

Ottenere i confini in formato POLY

Convertire da confine OSM a TXT

Per convertire il nostro confine in formato .osm in un formato .txt leggibile da Osmosis, bisogna usare lo script in Perl osm2poly, scaricabile da qui. Salvare il file come "osm2poly.pl", nella stessa cartella in cui si trova il file di confine .osm precedentemente creato.

  • Da un terminale GNU/Linux, dare il seguente comando:
perl osm2poly.pl confine_comune.osm > confine_comune.txt
Il risultato dovrebbe essere un file di nome "confine_comune.txt" che, se aperto con un editor di testo, dovrebbe avere una struttura simile a quella presentata nella pagina Osmosis/Polygon_Filter_File_Format.
  • È possibile che lo script restituisca errore, segnalando la riga del file confine_comune.osm a cui l'errore è presente. Nella gran parte dei casi questi errori sono legati alla presenza di tag relativi alle strade, che non sono stati correttamente eliminati.
  • In tal caso, aprire il file 'confine_comune.osm con un editor di testo e cancellare tutte le righe che presentano la struttura del tag, simile alla seguente:
<tag k='highway' v='services' />
Salvare quindi il file corretto e riprovare la conversione. Un file di confine in formato .osm che ha superato la conversione con osm2poly.pl è scaricabile a titolo di esempio da qui.

TIP: in alcuni casi è successo che anche i tag polygon_filename e polygon_id possano impedire la corretta conversione. In tal caso, eliminarli.

Convertire una relazione in formato POLY

È possibile usare boundaries.pl per estrarre direttamente da un file .osm tutti i confini con il valore desiderato di admin_level=* (2 per l'Italia, 4 per le Regioni, 6 per le Province, 8 per i Comuni).

Ad esempio per creare un file .poly per ciascun Comune (8100+ file):

mkdir comuni
perl boundaries.pl -in italy.osm -poly -adminlevel=8 -polybase=comuni/polygon

Per informazioni sul formato POLY consultare Osmosis/Polygon Filter File Format.

Estrarre i dati tramite Osmosis

Il task --bounding-polygon di Osmosis permette di estrarre i dati desiderati:

osmosis --read-xml file="italy.osm" --bounding-polygon file="confine_comune.txt" --write-xml file="comune.osm"