DE:Osmosis

From OpenStreetMap Wiki
Jump to navigation Jump to search
Unter-Artikel
Installation (de)
Detaillierte Benutzung (en)
Beispiele (de)
Benchmarking (en)
Tuning (en)
Entwicklung (en)
Schreiben von Plugins (en)

Osmosis ist eine Kommandozeilen-Java-Applikation zum Verarbeiten von OSM-Daten. Das Tool besteht aus einer Reihe von modularen Komponenten, die verkettet werden können, um eine größere Aufgabe auszuführen. Zum Beispiel gibt es Komponenten zum Lesen aus der Datenbank und aus einer Datei, Komponenten zum Schreiben in die Datenbank und in eine Datei, Komponenten zum Erstellen bzw. Einspielen von Änderungssätzen (changesets) sowie Komponenten zum Sortieren von Daten usw.

Es wurde so geschrieben, dass es einfach ist neue Funktionen zu ergänzen, ohne gängige Aufgaben, wie z.B. die Datenbankansprache, neu schreiben zu müssen.

Einige Anwendungen, die zur Zeit möglich sind:

  • Erzeugen von dumps (Datenbankauszüge) aus Planet.osm (eine .osm-Datei der ganzen Erde in der aktuellen Version)
  • Planet.osm in eine Datenbank laden.
  • Änderungs-Datensätze (Change Sets) unter Benutzung der Datenbank „history tables“ (Tabellen von Änderungen) erzeugen
  • Change Sets auf eine lokale Datenbank anwenden
  • Zwei Planet-Dateien vergleichen und Änderungs-Datensätze (Change Set) daraus erstellen.
  • Neusortieren von Daten in einer Planet Datei.
  • Daten aus einem rechteckigen Kartenausschnitt (Bounding Box) oder einem Polygon extrahieren

Aktueller Stand

Osmosis ist in einem Stadium, wo der Großteil des Programmcodes sich vermutlich nicht mehr drastisch ändern wird. Neue Funktionalitäten werden mit der Zeit eingeführt, in Form von neuen Programmteilen (tasks) und Plugins (Erweiterungen), aber bereits vorhandene Funktionalitäten werden wahrscheinlich nicht mehr entfernt. Alle Fehlerberichte sind willkommen.

Die aktuell freigegebene Version unterstützt nur noch die OSM-API 0.6 (en). Die letzte Version, die noch die API 0.5 (en) unterstützte war die Version 0.35.

Herunterladen

Letzte Stabile Version

Wenn möglich, sollte die aktuelle stabile Version benutzt werden.

Entwicklungsversionen

Diese sollten nur benutzt werden, wenn du Zugriff auf die letzten neuen Funktionen oder Fehlerbeseitigungen benötigst. Es gibt keine Garantie zur Stabilität dieser Versionen.

Die automatischen nächtlichen Builds erhalten eine Git-Revisionsnummer, damit solche Versionen leicht erkannt werden können.

Java 1.5

Für diejenigen, die nicht die Java 1.6 Laufzeitversion (runtime) installieren können, ist im folgenden eine 1.5 kompatible Version verfügbar. Es ist bekannt, dass dies bei älteren Mac-Systemen notwendig ist.

API 0.5 Unterstützung

Die Version 0.35 ist die letzte Version, die die OSM API 0.5 unterstützt.

Datenbank-Aufbau

(siehe Osmosis/PostGIS_Setup (en))

Die Erstellungsskripte für den Datenbank-Aufbau, die zur Produktions-API passen, sind im Osmosis-Software-Paket (distribution) im Verzeichnis script/contrib directory enthalten.

Die Erstellungsskripte für das Datenbank-Schema Osmosis PostGIS "simple" Schema sind im Osmosis-Software-Paket (distribution) im Verzeichnis script directory enthalten.

Quellcode

Das Git-Repository ist verfügbar auf GitHub unter https://github.com/openstreetmap/osmosis.

Siehe auch: Osmosis/Installation (de)

Benutzung

Detailierte Benutzung

Die genauen Einzelheiten aller Aufgaben (tasks) und ihre Anwendung sind unter folgenden Links verfügbar:

Die ganzen Einzelheiten für ältere Versionen sind verfügbar unter:

Um die Leistung zu maximieren, wird auf Tuning und Benchmarking (en) verwiesen.

Weiterhin ist eine graphische (Frontend-) Oberfläche für die Steuerung von Osmosis verfügbar: OSMembrane

Beispielhafte Benutzung

(Mehr auf der Unterseite DE:Osmosis/Examples.)


Import einer planet Datei in eine lokale PostgreSQL (rails port) Datenbank.

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

Export einer planet Datei von einer lokalen PostgreSQL database aus.

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

Herleitung eines Änderungs-Datensatzes (change set) zwischen zwei planet Dateien.

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

Herleitung eines Änderungs-Datensatzes (change set) zwischen einer planet Datei und einer lokalen PostgreSQL Datenbank.

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"

Anwendung eines Änderungs-Datensatzes (change set) auf eine planet Datei.

osmosis  --read-xml-change file="planetdiff-1-2.osc" --read-xml file="planet1.osm" --apply-change --write-xml file="planet2.osm" oder
osmosis  --read-xml file="planet1.osm" --read-xml-change file="planetdiff-1-2.osc" --apply-change --write-xml file="planet2.osm" for the older version

Sortieren des Inhalts einer planet Datei.

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

Die obigen Beispiele nutzen die standardmäßige Pipeline Verbindungsfunktion (pipe connection feature), aber für ein einfache Befehlszeile "Lese- und Schreibe- planet Datei" gibt es zwei Möglichkeiten. Das erste der beiden folgenden Beispiele benutzt die standardmäßige Pipeline Verbindung, das zweite verbindet explizit die beiden Komponenten unter Benutzung der Pipeline "mypipe".

Die standardmäßige Pipeline-Verbindung wird immer so lange laufen, wie jede Aufgabe (task) in der korrekten Reihenfolge angegeben ist. Jede Aufgabe stellt ihren Ausgabestrom (output stream) auf einen Stack und jede Aufgabe, die einen Eingabestrom braucht, holt diesen vom Stack. Dieser Stack-basierte Ansatz ist der Grund, warum das obige "--apply-change" Beispiel zuerst die Änderungsdatei (change file) liest, dann die Datendatei (data file) - die „--apply-change“ Aufgabe wird zuerst die Datendatei (data file) vom Stack abrufen und dann die Änderungsdatei (change file).

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"

Extrahieren eines Gebiets (area) basierend auf einer Osmosis/Polygon Filter File Format Datei:

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

Extrahieren nur der Wege, die spezifische Tags haben. Mit der Angabe von --used-node werden nur die Knoten aus den gefilterten Wegen extrahiert. Relationen bleiben unberührt.

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

Bei größeren Dateien (z.B. einer planet Datei), kann es zu Abstürzen (result in a segfault) durch Hauptspeicherbeschränkungen kommen. In diesem Fall hilft möglicherweise die Ergänzung idTrackerType=BitSet als Parameter für --used-node:

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

Bitte beachte, dass --way-key-value und --node-key-value nicht in einem Lauf zusammen verwendet werden können. Stattdessen erzeuge zwei (oder mehr) Dateien in verschiedenen Läufen und fasse diese anschließend zusammen (tatsächlich, für n Dateien brauchst Du n-1 Zusammenfassungs Kommandos):

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


Extrahierung von rechteckigen Ausschnitten

Eine der Basisanwendungen ist die Extraktion eines Teils einer OSM XML-Datei. Du hast möglicherweise ein Planet-Datei (planet.osm) und möchtest eine Region extrahieren, oder möglicherweise hast Du einen Länderextrakt heruntergeladen, möchtest aber nur eine Stadt. Der einfachste Weg, das zu tun, ist die Extraktion eines Rechteckausschnitts.

Zwei Beispiele, die Nürnberg und einen kleinen Bereich darum aus einer Deutschland-OSM-Datei oder möglicherweise einer Planet.osm-Datei extrahieren:

 osmosis \
  --read-xml enableDateParsing=no file=germany.osm.bz2 \
  --bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201 \
  --write-xml nürnberg.osm.bz2
 bzcat planet.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 > nürnberg.osm.bz2

Der zweite Ansatz verwendet bzip2 direkt zum extrahieren und komprimieren, weil es effektiver ist als der eingebaute Archivierer.

Der einfachste Weg, um die Koordinaten für einen Rechteck-Ausschnitt zu bestimmen, ist der "Export"-Reiter auf www.openstreetmap.org - dort kannst Du ein Rechteck markieren und erhältst dann die Koordinaten angezeigt.

Windows

bzcat ist das Werkzeug, dass Du auch unter Windows einsetzen solltest, wenn Du gute Performance haben möchtest. Nur ist /dev/stdin kein gültiger Dateipfad in Windows. Aber Du kannst CONIN$ als Pfadangabe verwenden.

Verwenden von .pbf Dateien

Hierzu ist diese Version erforderlich: osmosis-pbf

Unter Ubuntu kann ein Gebiet aus der z.B. europe.osm.pbf Datei mit einem polygon d-dk.poly ausgeschitten werden. Andere Polygone können mit dem Editor JOSM und der Hilfsanwendung osm2poly.pl erstellt werden.

Der Befehl ist im Verzeichnis osmosis auszuführen und lautet z.B. für Deutschlad-Dänemark:

bin/osmosis --read-pbf europe-latest.osm.pbf --bounding-polygon file="d-dk.poly" --write-pbf file="d-dk.osm.pbf"

Hilfe bekommen und Fehler melden

Der beste Ort, um Antworten auf Fragen zur Nutzung von osmosis zu erhalten, ist die osmosis Entwicklungs Mailingliste.

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

Bitte besprich potentielle Fehler auf der Entwicklungsmailngliste, bevor du neue Fehlertickets erstellt. Wenn du dir sicher bist, einen neuen Fehler gefunden zu haben, dann kannst du ihn melden im OSM Tracking System mit der Angabe der Komponente "osmosis":

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

Siehe auch

  • Um Einzelheiten zum Dateiformat von osmosis zu erhalten, wie Unterschiede dargestellt werden, nutze OsmChange.
  • Komplexere Beispiele gibt es beim Link DE:Osmosis/Examples.
  • Wenn du eigene Aufgaben (tasks) erstellen möchtest, siehe nach bei DE:Osmosis/Writing Plugins
  • Die komplette Liste der Kommandozeilen Optionen gibt es bei Osmosis/Detailed Usage.
  • Das Programm DE:Osm2pgsql kann auch einen Import in die postgis Datenbank durchführen.
  • Dank Osmosis, kann Osm2postgresql postgresql & postgis installieren und deine OSM Daten mit einem einzigen Kommando
  • OSMembrane ist ein Frontend für das Datenverarbeitungswerkzeug Osmosis.

bereitstelllen.

Entwicklung

Einzelheiten zur Entwicklung von osmosis sind verfügbar auf Osmosis/Development (en). Besuche diese Seite um dich mit der Dokumentation über die interne Struktur von osmosis, Entwicklungsentscheidungen, Schritte zum konfigurieren von Entwicklungsumgebungen usw. vertraut zu machen.

Hinweise

Die minimal unterstützte Java Version ist 1.6. Osmosis nutzt einige java.awt.geom Klassen, die nur in 1.6 vorhanden sind. Wenn diese angepasst wurden, um 1.5 Funktionalität zu nutzen, könnte es möglich sein, die vorherige Java Version 1.5 zu verwenden. Osmosis nutzt generische (generics) und java.util.concurrent Funktionalitäten, welche mindestens Java 1.5 benötigen.

Die eingebaute bzip (.bz2) Performance is viel langsamer als die gzip (.gz) Version in Java selbst (Java gzip nutzt nativen Programmcode zur Performancesteigerung). Auch aktuelle planet Datei Downloads nutzen Funktionalität von bzip, die nicht unterstützt von der eingebauten bzip Bibliothek werden, nämlich streams. Um mit diesen zu arbeiten und für die schnellere Verarbeitung großer Dateien, wird empfohlen, das extra für das jeweilige Betriebssystem (platform) erstellte bzip Programm zu verwenden und außerdem über /dev/stdin und /dev/stdout Dateien zu lesen und zu schreiben

pbzip2 -d -c planet.osm.bz2 | bin/osmosis --rx /dev/stdin --wx /dev/stdout | gzip -c > planet-same.osm.gz )


Unter Win 7 64 bit kann es notwendig sein, .bat Dateien auf der Eigabezeile auszuführen. In die zugrundliegende osmosis.bat Datei muss dann der vollständigen Pfad für Java.exe eingefügt werden.