IT:Osmosis

From OpenStreetMap Wiki
Jump to navigation Jump to search
Sotto pagine
Installazione
Dettagli sull'uso
Esempi
Sviluppo
Scrivere Plugins

Osmosis è un'applicazione java a riga di comando per processare i dati di OSM. Lo strumento consiste in una serie di componenti innestabili che possono essere legati insieme per eseguire operazioni più complesse. Per esempio, ha componenti per leggere i dati da database o da file, componenti per scrivere su database e su file, componenti per derivare e applicare gruppi di modifiche (change set) alla sorgente dati, componenti per ordinare i dati, ecc. E' stato scritto in modo che sià facile aggiungere una nuova funzione senza bisogno di riscrivere i processi più comuni come la gestione dei file e dei database.

Alcuni esempi di cose che possono essere fatte attualmente:

  • Scaricare una copia (dump) del pianeta dal database
  • Caricare una copia (dump) del pianeta su un database
  • Produrre un insieme di modifiche (change sets) usando lo storico delle tabelle del database
  • Applicare insiemi di modifiche ad un database locale
  • Comparare due file del pianeta e produrre un insieme di modifiche
  • Riordinare i dati presenti in file del pianeta
  • Estrarre i dati da un riquadro di delimitazione o un poligono

Stato attuale

Osmosi è nello stato in cui la maggior parte del codice difficilmente cambierà drasticamente. Le nuove funzionalità che verranno introdotte nel tempo saranno sotto forma di nuovi processi e plugin ma è improbabile che vengano rimosse le funzionalità attuali. Qualsiasi segnalazione di errori è la benvenuta.

La versione attualmente rilasciata supporta entrambi i l modell di dati 0.5 e 0.6 di OSM

Dove scaricarlo

Ultima versione stabile

Quando possibile devono essere usate le seguenti versioni stabili.

Versioni di sviluppo

Queste versioni dovrebbero essere usate solo nel caso in cui uno abbia bisogno delle bisogno delle ultime funzioni o di correzioni di errori. Non ci sono garanzie sulla stabilità della release.

Sul server vengono create regolarmente nuove versioni. Queste includono il numero di sottoversione della revisione per identificare facilmente la versione.

Le versioni 'nightly builds' vecchio stile sono ancora disponibili ma dovrebbero essere usate solamente se le versioni continuamente integrate sul server non fossero disponibili.

http://dev.openstreetmap.org/~bretth/osmosis-build/

Java 1.5

Per coloro che non possono installare il runtime 1.6 di Java, possono trovare una versione compatibile con la 1.5 qui di seguito. Questo è un problema conosciuto per alcuni vecchi sistemi Mac.

Supporto alle API 0.5

La versione 0.35 è l'ultima distribuzione a supportare le API 0.5.

Schema del DB

Gli script di creazione del database schema corrispondono alle API di produzione e sono comprese nella distribuzione di Osmosis all'interno della cartella script/contrib.

Gli script di creazione del database schema per Osmosis PostGIS schema "semplice" sono compresi nella distribuzione di Osmosis all'interno della cartella script.

Sottoversioni

Il repository delle sottoversioni è disponibile su: http://svn.openstreetmap.org/applications/utils/osmosis/

(Maggiori dettagli possono essere trovati nella sottopagina di istruzioni installazione)

Utilizzo

Dettagli sull'uso

Tutti i dettagli di tutti i comandi e il loro utilizzo sono disponibili nei seguenti link:

Dettagli sull'utilizzo per le versione precedenti sono disponibili qui sotto:

Esempio di utilizzo

(Ne trovate altri nella sottopagina Esempi.)

Importare un file del pianeta in un database PostgreSQL locale

osmosis --read-xml file="planet.osm" --write-apidb host="x" database="x" user="x" password="x"

Esportare un file del pianeta da un database PosgreSQL locale.

osmosis --read-apidb host="x" database="x" user="x" password="x" --write-xml file="planet.osm"

Derivare un file contenente i cambiamenti confrontando due file del pianeta.

osmosis --read-xml file="planet1.osm" --read-xml file="planet2.osm" --derive-change --write-xml-change file="planetdiff-1-2.osc"

Derivare un file contenente i cambiamenti confrontando un file del pianeta ed un database locale PostgreSQL.

osmosis --read-xml file="planet1.osm" --read-apidb host="x" database="x" user="x" password="x" --derive-change --write-xml-change file="planetdiff-1-2.osc"

Applicare un insieme di modifiche ad un file del pianeta.

osmosis  --read-xml-change file="planetdiff-1-2.osc" --read-xml file="planet1.osm" --apply-change --write-xml file="planet2.osm" o
osmosis  --read-xml file="planet1.osm" --read-xml-change file="planetdiff-1-2.osc" --apply-change --write-xml file="planet2.osm" per le versioni precedenti

Ordinare il contenuto di un file del pianeta.

osmosis --read-xml file="data.osm" --sort type="TypeThenId" --write-xml file="data-sorted.osm"

Gli esempi sopra riportati usano la connessione pipe predefinita, tuttavia una istruzione a riga di comando per eseguire una semplice lettura e scrittura di un file del pianeta può essere scritta in due modi. Il primo esempio usa la connessione pipe predefinita, il secondo collega esplicitamente i due componenti usando una pipe chiamata "mypipe". La connesione pipe predefinita funzionerà fintanto che ogni attività viene scritta nell'ordine corretto. Ogni processo mette il risultato della propria elaborazione in una pila, e ogni processo che richiede dati di input li va a prendere dalla pila. Questo approccio basato sulle pile è il motivo per cui l'esempio in alto "--apply-change" legge prima il file dei cambiamenti, poi il file dei dati, il processo --apply-change per prima cosa recupererà il file dati dalla pila e poi il file dei cambiamenti.

osmosis --read-xml file="planetin.osm" --write-xml file="planetout.osm"
osmosis --read-xml file="planetin.osm" outPipe.0="mypipe" --write-xml file="planetout.osm" inPipe.0="mypipe"

Extract an area based on a Osmosis/Polygon Filter File Format file:

osmosis --read-xml file="planet-latest.osm" --bounding-polygon file="country2pts.txt" --write-xml file="germany.osm"

Estrarre solo quelle vie che hanno un certo tipo di tag. Specificando --used-node verranno estratti solo i nodi che sono usati nelle strade filtrate. Le relazioni rimangono intatte.

osmosis --read-xml city.osm --way-key-value keyValueList="railway.tram,railway.tram_stop" --used-node --write-xml city_tram.osm

Usando file di grandi dimensioni (p.e. il file del pianeta), potrebbe avvenire un errore (segfault) a causa delle limitazioni di memoria. In questo caso, passando il parametro idTrackerType=BitSet a --used-node potrebbe essere di aiuto:

osmosis --read-xml city.osm --way-key-value keyValueList="railway.tram,railway.tram_stop" --used-node idTrackerType=BitSet --write-xml city_tram.osm

Notare che --way-key-value e --node-key-value non possono essere usati in un unico comando. Invece, creando due (o più) file in diverse esecuzioni e undendoli insieme successivamente (si, per n file avrete bisogno di n-1 comandi di unione):

osmosis --rx 1.osm --rx 2.osm --rx 3.osm --merge --merge --wx merged.osm

Solo i processi della 0.5 sono disponibili dalla versione 0.22 in poi.

Estrazione di finestre di delimitazione

Uno dei casi d'uso più comune è l'estrazione di un sottoinsieme più piccolo di un file XML di OSM. Potreste aver scaricato l'intero mondo da OSM (planet.osm) e voler estrarre alcune regioni, o potreste aver scaricato un intero paese, e voler estrarre solo una città. Il modo più semplice per farlo è estraendone un rettangolo.

Un esempio che estrae Nuremberg e alcune aree attorno ad essa dal file della Germania - o l'intero mondo - OSM:

 bzcat downloaded.osm.bz2 | osmosis\
  --read-xml enableDateParsing=no file=/dev/stdin\
  --bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201 --write-xml file=-\
  | bzip2 > extracted.osm.bz2

Questo approccio fa uso di bzip2 direttamente per estrarre e comprimere, che sembra essere più efficiente della versione non compressa

Il modo più facile per ottenere le coordinate consiste nel fare fare doppio click nel punto di cui volete le coordinate, poi cliccando "Permalink" e prendere i dati dal campo indirizzo

Trucchi su Windows

bzcat è lo strumento da utilizzare anche sotto windows se volete avere buone prestazioni. Tuttavia, /dev/stdin non è un percorso valido su Windows. Però, uno può utilizzare CONIN$ come percorso.

Ottenere Aiuto e Riportare Errori

Il posto migliore per ottenere risposte alle domande sull'utilizzo di Osmosis è la mailing list sullo sviluppo di osmosis.

http://lists.openstreetmap.org/listinfo/osmosis-dev

Si prega di discutere potenziali errori nella mailing list degli sviluppatori prima di creare nuovi tickets. Se siete sicuri di aver trovato un errore, può essere registrato nel sistema di tracciamento di OSM riguardo al componente "osmosis":

http://trac.openstreetmap.org/query?component=osmosis

Vedere anche

  • Per visualizzare i dettagli sul formato file usato da osmosis per descrivere le differenze, visitare OsmChange.
  • Per vedere esempi più complessi, visitare Esempi.
  • Per scrivere un proprio processo, vedere, vedere Scrivere un Plugins
  • Per vedere l'insieme completo delle opzioni disponibili da riga di comando, visitare Uso dettagliato.
  • Osm2pgsql può anche importare dati in un database postgis

Sviluppo

Dettagli sullo sviluppo di osmosis sono disponibili su Sviluppo. Guardare lì per vedere la documentazione sulla struttura interna di Osmosis, scelte di progettazione, i passaggi per configurare l'ambiente di sviluppo ecc.

Note

La versione minima di Java supportata è la 1.6. Osmosis fa uso di alcune classi java.awt.geom che sono presenti solo nella versione 1.6, se queste vengono riscritte per usare le funzionalità della versione 1.5 sarebbe possibile tornare alla versione minima precedente la 1.5. Osmosis utilizza le funzioni generiche e java.util.concurrent e richiede come minimo la versione 1.5 di Java.

Le prestazioni della versione bzip (.bz2) sono molto più lente della versione gzip (.gz) in Java (Java gzip utilizza codice nativo per aumentare le performance). Anche i recenti download del pianeta usano le funzioni di bzip che non sono supportate dalla libreria bzip (flussi). Per lavorare con questi, e per processi più veloci su file di grandi dimensioni, è consigliato usare la piattaforma nativa bzip e leggere e scrivere file da /dev/stdin e /dev/stdout rispettivamente. (pbzip2 -d -c planet.osm.bz2 | bin/osmosis --rx /dev/stdin --wx /dev/stdout | gzip -c > planet-same.osm.gz ) See also Osmosis/Examples#Benchmark tests

Sotto Win 7 64 bit potrebbe essere necessario lanciare il file .bat dal prompt dei comandi. All'interno del file osmosis.bat può essere necessario mettere il percorso completo del file java.exe.