DE:Osmconvert

From OpenStreetMap Wiki
Jump to navigation Jump to search

Mit osmconvert lassen sich Dateien zwischen verschiedenen OpenStreetMap-Formate umwandeln und verarbeiten. Der Funktionsumfang des Programms ist einiges geringer als der der Standardsoftware Osmosis, so besitzt osmconvert beispielsweise keine Datenbank-Schnittstelle, jedoch erledigt das Programm die Standardaufgaben schneller und besitzt ein paar Spezialfunktionen (--all-to-nodes, --complete-multipolygons und --out-statistics).

Download

Wie üblich: Gewährleistung ausgeschlossen, so weit wie gesetzlich zulässig.

Binaries

Linux

Windows

Einschränkungen: Die Windows-Version von osmconvert (die heruntergeladene Programmdatei) funktioniert nicht mit Dateien größer als 2 GiB wie beispielsweise planet.osm wenn man die --complete-ways, --complete-multipolygons oder --complete-boundaries -Option verwendet. Beispielsweise funktioniert die Windows-64-bit-Version mit dem Kommando "osmconvert planet.osm.pbf -b=17.7,59.15,18.4,59.5 -o=stockholm.osm --complete-ways --drop-version --verbose" nicht. Das gleiche Kommando funktioniert jedoch einwandfrei mit der Linux-64-bit-Version. Das scheint an einem Problem beim Aufsuchen von Dateipositionen größer als der vorzeichenbehaftete 32-bit-Bereich zu liegen, was eine Einschränkung der zlib-Bibliothek ist, die zurzeit von den Windowsdateien gelinkt wird.

Source

    • Zum Linken wird die zlib benötigt (z. B., cc osmconvert.c -lz -o osmconvert)

Aufruf des Programms per Doppelklick

osmconvert kann sowohl unter Linux als auch unter Windows per Doppelklick aufgerufen werden. Es erscheint ein Textmenü, über das die Grundfunktionen ausgewählt werden können. Diese Art der Bedienung ist für Anwender gedacht, die mit der Kommandozeilen-Eingabe keine Erfahrung haben. Um die volle Leistungsfähigkeit des Programms nutzen zu können, muss es per Kommandozeile gestartet werden (unter Windows beispielsweise per Windows-Taste+R oder über das Menü Start->Ausführen->Öffnen: cmd).

Ein Hinweis zu Windows: die Nachfolgenden Aufrufbeispiele beginnen immer mit "./osmconvert". Der einleitende Punkt und der Schrägstrich sind bei Linux notwendig und gehören dort zum Sicherheitskonzept. Windows kann damit nichts anfangen, daher darf dort nur der reine Programmname osmconvert eingegeben werden.

Beschreibung des Programms

Eine detaillierte Beschreibung aller Optionen ist über die eingebaute englischsprachige Hilfefunktion abrufbar:

./osmconvert --help

Eine Übersicht über alle Optionen wird angezeigt mit:

./osmconvert -h

Die folgenden Absätze beschreiben die wichtigsten Funktionen des Programms.

Dateien konvertieren

Eine Umwandlung ist zwischen diesen Formaten möglich:

Falls die Ausgabe in die Standardausgabe erfolgen soll, muss dem Programm mitgeteilt werden, welches Ausgabeformat gewünscht ist:

--out-osm (default), --out-osc, --out-osh, --out-o5m, --out-o5c oder --out-pbf.

Wird die Option -o= zur Angabe des Namens der Ausgabedatei verwendet, ermittelt osmconvert das Format selbst anhand der gewählten Dateiendung. Beispiele für beide Fälle:

./osmconvert norway.pbf >norway.osm
./osmconvert region.pbf -o=region.o5m
./osmconvert region.o5m -o=region.pbf
./osmconvert 20110510_20110511.osc --out-o5c >20110510_20110511.o5c

Komprimierte Eingabedateien können ebenfalls verarbeitet werden. Auch die Ausgabedatei lässt sich komprimieren, wenn man den Weg per Standardausgabe nutzt. Beispiele:

bzcat europe.osm.bz2 | ./osmconvert - -o=europe.o5m
./osmconvert norway.pbf | gzip -1 >norway.osm.gz

Die Option "-" zeigt dem Programm, dass es die Eingabe über die Standardeingabe erwarten soll.

osmconvert bietet eine begrenzte Dekomprimierungsfunktion: es kann .gz-Dateien entpacken. Das Programm erkennt die Komprimierung von selbst, so dass man sich nicht darum kümmern muss, welche Eingabedatei komprimiert ist und welche nicht. Der eingebaute Dekomprimierungsalgorithmus ist weniger leistungsfähig als bei spezialisierten Entpacker-Programmen; trotzdem ist diese Funktion recht hilfreich, wenn man etwa eine Reihe neu heruntergeladener komprimierter .osc-Dateien verarbeiten will. Beispiele:

./osmconvert alt.o5m daily_updates/2011*.osc.gz -o=neu.o5m
./osmconvert daily_updates/2011*.osc.gz --merge-versions --out-osc | gzip >kumuliert.osc.gz

Geografische Grenzen verwenden

Ausschneiden per Längen- und Breitengrad

Das Angeben von Koordinaten ist die einfachste Art der Auswahl eines geografischen Bereichs. Bei manchen Karten wird die Mausposition in Form von Längen- und Breitengrad eingeblendet. Beispiele: Osmarenderer-Karte, ÖV-Karte.

Für die Definition eines begrenzenden Quasi-Rechtecks müssen die Koordinaten der südwestlichen und der nordöstlichen Ecke angegeben werden. Beispiel:

./osmconvert germany.pbf -b=10.5,49,11.5,50 -o=nuernberg.o5m

Ausschneiden per Vieleck

Anstelle der Koordinaten kann auch eine Grenzpolygon-Datei benutzt werden. Das ermöglicht die Begrenzung der Fläche beispielsweise entlang einer politischen Grenze:

./osmconvert germany.pbf -B=hamburg.poly -o=hamburg.pbf

Die Formatbeschreibung für eine Grenzpolygon-Datei kann hier im OSM-Wiki nachgeschlagen werden. Der Syntax muss nicht strikt eingehalten werden, wichtig ist jedoch, dass jede Koordinatenzeile mit einem oder mehreren Leerzeichen beginnt. osmconvert kann auch mit mehrfachen Polygonen und Polygonen mit ausgeschnittenen Inseln umgehen, wenn diese in der Polygondatei eindeutig definiert wurden.

Ausschneiden aus OSM-Change-Dateien?

Es ist nicht ratsam, geografische Grenzen bei OSM-Change-Dateien anzuwenden. Da nur Knoten Koordinaten enthalten, weiß das Programm nicht, was es mit Wegen und Relationen machen soll, deren referenzierte Knoten sich nicht in der gleichen Datei befinden. Als Ergebnis werden diese Wege und Relationen ausgeschlossen. Das ist jedoch nicht das, was man normalerweise erreichen will.

Grenzüberschreitende Wege komplett erhalten

Für manche Anwendungen ist es wichtig, die Linien (so genannte ways) jeweils auch dann komplett zu erhalten, wenn sich nur ein Abschnitt von ihnen im ausgewählten Bereich befindet. Das geht mit der Option --complete-ways. Beispiele:

./osmconvert germany.o5m -b=10.5,49,11.5,50 --complete-ways -o=nuernberg.o5m
./osmconvert germany.o5m -B=hamburg.poly --complete-ways -o=hamburg.pbf

Bei dieser wie auch bei den beiden nachfolgend beschriebenen Optionen gilt für 32-Bit-Windows eine Größenbeschränkung für die Eingabedatei: Da die Datei mehrfach gelesen werden muss – es wird in der Datei "gesprungen" – darf ihre Größe 2 GiB nicht überschreiten. Für 64-Bit Windows sowie für 32- und 64-Bit-Linux gilt diese Einschränkung nicht.

Ebenfalls für diese und die beiden nachfolgenden Optionen wird empfohlen, als Eingabeformat .o5m zu verwenden, da .pbf-Dateien in der Regel intern komprimiert sind und deswegen deutlich länger benötigen um (mehrfach) eingelesen zu werden.

Keine der --complete-...-Optionen kann über das Programm osmupdate aufgerufen werden.

Grenzüberschreitende Multipolygone komplett erhalten

Immer mehr Flächen von Flüssen, Waldgebieten und Seen werden nicht durch eine einzige, sondern durch zusammengesetzte Linien begrenzt. Man verwendet dafür so genannte Multipolygone und ordnet ihnen die betreffenden Linien jeweils mit der Rolle outer oder inner zu.

osmconvert kann beim Anwenden von geografischen Grenzen auf solche Multipolygone Rücksicht nehmen und sie auch dann komplett erhalten, wenn sich nur ein kleiner Abschnitt innerhalb des gewünschten Bereichs befindet. Verantwortlich dafür ist die Option --complete-multipolygons. Beispiele:

./osmconvert germany.o5m -b=10.5,49,11.5,50 --complete-multipolygons -o=nuernberg.o5m
./osmconvert germany.o5m -B=hamburg.poly --complete-multipolygons -o=hamburg.pbf

Bitte auch die drei Hinweise am Ende des vorherigen Abschnitts beachten.

Bis 2016 hieß diese Option --complex-ways.

Grenzüberschreitende administrative Grenzen komplett erhalten

Um sicherzustellen, dass administrative Grenzen auch dann komplett erhalten bleiben, wenn Teile davon außerhalb des auszuschneidenden Bereichs liegen, kann die Option --complete-boundaries verwendet werden. Beispiele:

./osmconvert germany.o5m -b=10.5,49,11.5,50 --complete-boundaries -o=nuernberg.o5m
./osmconvert germany.o5m -B=hamburg.poly --complete-boundaries -o=hamburg.pbf

Bitte auch die drei Hinweise zwei Abschnitte weiter oben beachten.

Referenzen zu außerhalb liegenden Objekten ausschließen

Wenn es notwendig ist, Referenzen zu Objekten zu löschen, die außerhalb einer geografischen Grenze befinden, kann die Option --drop-broken-refs verwendet werden (nützlich eventuell für Datenimporte in OSM Map Composer oder JOSM).

Zwei oder mehr geographische Bereiche zusammenführen

Unter bestimmten Voraussetzungen können OSM-Dateien zusammengeführt werden. Wenn sie Objekte (nodes, ways, relations) mit denselben IDs beinhalten, müssen diese denselben Inhalt haben. Beispiel: Wenn ein Weg die geografische Grenze zwischen zwei regionalen Dateien kreuzt, muss der Datensatz des Weges jede Node-Referenz enthalten, also auch die Referenzen zu Punkten, die außerhalb der Grenzen der betrachteten Datei liegen. Solche Regionen dürfen daher nicht mit der Option --drop-brokenrefs ausgeschnitten worden sein. Beispiele für das Zusammenführen geographischer Bereiche:

./osmconvert austria.o5m germany.o5m switzerland.o5m -o=dach.o5m
./osmconvert north_america.osm south_america.osm -o=americas.osm

Sonderfall: Höhenlinien schneiden

Siehe: Howto render Garmin countour layers with no artefacts

Informationen oder Inhalte aus der Ausgabedatei ausschließen

Autor-Information entfernen

Die meisten Programme benötigen keine Autor-Informationen. Zum Entfernen der Informationen von Benutzername, Benutzer-ID, Changeset und Zeitstempel muss das Kommando um die Option --drop-author ergänzt werden. Beispiel:

./osmconvert --drop-author a.pbf -o=a.osm

In aller Regel sind keine Probleme zu erwarten, wenn bei den Formaten .osm und .o5m die Autor-Informationen fehlen, beim Format .pbf kann das jedoch zu Problemen führen und wird in diesem Fall nicht empfohlen.

Falls die Autor-Informationen später aus formalen Gründen wieder benötigt werden, etwa, weil ein nachgeschaltetes Programm diese zwar nicht benötigt, aber aus formalen Gründen erwartet, kann man sie mit der Option --fake-author wieder hinzufügen. Natürlich handelt es sich dabei dann nicht um die gelöschten Informationen sondern um Ersatzwerte, die lediglich den Formatvorgaben entsprechen.

OSM-Objekttypen ausschließen

Es ist möglich ganze Objektgruppen aus einer Datei zu entfernen:

--drop-nodes
--drop-ways
--drop-relations

Detailliertere Filtermöglichkeiten bietet das Programm osmfilter.

Wege und Relationen entfernen und in Knoten umwandeln

Manchmal ist es für die weitere Verarbeitung von OSM-Daten einfacher, wenn die Datei nur noch einen Objekttyp enthält, nämlich den Typ Knoten (node). osmconvert bietet die Möglichkeit, alle Wege und Relationen zu entfernen und stattdessen deren geografische Mittelpunkte als Knoten neu in die Datei aufzunehmen. Für jedes Objekt entsteht ein Knoten mit genau den gleichen Tags. Bei nicht-geschlossenen Wegen wird als neue Position nicht das Zentrum verwendet, sondern die Position eines jeweils enthaltenen Knotens. Als ID wird die ID des Wegs verwendet, dabei aber um 1015 erhöht. Für Relationen gilt das Gleiche, die ID wird jedoch um 2*1015 erhöht. Beispiel:

./osmconvert hamburg.pbf --all-to-nodes -o=hamburg_nodes.osm

Die OpenLinkMap nutzt diese Möglichkeit beispielsweise, um die weitere Verarbeitung der Daten zu vereinfachen. Für den Fall, dass ein anderer ID-Versatz verwendet werden soll, kann man diesen mit der Option --object-type-offset= konkret vorgeben. Für den Fall, dass ein anderer ID-Versatz verwendet werden soll, kann man diesen mit der Option --object-type-offset= konkret vorgeben.

Die Option --add-bbox-tags erzeugt zusätzlich ein umgebendes Rechteck (eine so genannte Bounding Box) für jeden Weg und jede Relation, die in einen Knoten umgewandelt wurden. Diese Bounding Boxes erscheinen als Tags. Zum Beispiel (Region London):

<tag k="bBox" v="-0.5000,51.0000,0.5000,52.0000"/>

Objekt-Tags verändern

Manchmal ist es nützlich, einzelne Tags zu verändern, um die weitere Verarbeitung der Daten zu erleichtern.

Werte verändern

Es lassen sich einzelne Werte bestimmen, die dann durch das Programm entsprechend geändert werden:

./osmconvert a.o5m --modify-tags="highway=primary to =tertiary highway=secondary to =tertiary" -o=all_streets_are_small.o5m

In diesem Beispiel werden alle Straßen der ersten und zweiten Ordnung umgewandelt in Straßen dritter Ordnung.

Schlüssel verändern

Schlüssel lassen sich auf die gleiche Weise ändern. Beispiel:

./osmconvert a.o5m --modify-node-tags="amenity=fire_hydrant to emergency=fire_hydrant" -o=new_hydrant_syntax.o5m

Tags hinzufügen

Genauso wie beim Filtern mit osmfilter kann man Vergleiche auch beim Modifizieren von Tags mit osmconvert verwenden. Dadurch lassen sich beispielsweise redundante Tags hinzufügen:

./osmconvert a.o5m --modify-tags="maxspeed<=20 add speed_category=slow" -o=speed_categories.o5m

Eine Prüfung, ob bereits ein Tag mit gleichem Schlüsselnamen existiert, findet nicht statt. Bitte ggf. die Tag-Filterfunktion von osmfilter benutzen, um Kollisionen zu vermeiden.

OSM-Dateien aktualisieren

OSM-Datein der unterschiedlichen Formate (*.osm, *.o5m oder *.pbf) können mit Hilfe von einem oder mehreren OSM-Change-Files (*.osc oder *.o5c) aktualisiert werden.

Wenn man beispielsweise eine planet.osm-Datei oder einen regionalen Ausschnitt wie germany.o5m mit Stand von gestern hat, kann man diese Datei mit der Change-Datei von heute aktualisieren (spart Downloadzeit und Traffic). Beispiele:

./osmconvert planet_old.osm changefile.osc -o=planet_new.osm
./osmconvert planet_old.o5m changefile.osc.gz -o=planet_new.o5m
./osmconvert germany_old.o5m changefile.osc -B=germany.poly -o=germany_new.o5m

Wenn die OSM-Datei schon älter ist, können auch mehrere Change-Dateien gleichzeitig verarbeitet werden:

./osmconvert veryold.osm c1.osc c2.osc c3.osc -o=new.osm
./osmconvert day24.o5m c24_25.osc c25_26.osc -o=day26.o5m
./osmconvert day01.o5m november/*.osc -o=day30.o5m

In der Change-Datei dürfen nur OSM-Objekt-Unikate enthalten sein. Das bedeutet, das jeder Punkt (node), jeder Weg (way) und jede Relation (relation) nur einmal vorkommen dürfen. Minütliche und stündliche Change-Files können mehr als eine Version von OSM-Objekten enthalten. In diese Fällen werden Warnmeldungen angezeigt. Die verschiedenen Versionen eines Objekts lassen sich mit der Option --merge-versions jeweils zu einer zusammenführen. Dadurch verbleibt von jedem Objekt nur die jeweils neueste Version in der Datei.

Beim Aktualisieren und automatischen Zusammenfassen von Change-Dateien hilft auch das Programm osmupdate.

Unterschiede zwischen zwei OSM-Dateien berechnen

Die Unterschiede zwischen zwei OSM-Dateien können ermittelt und in eine OSM-Change-Datei geschrieben werden. Beispiele:

./osmconvert old.osm new.osm --diff -o=changefile.osc
./osmconvert old.o5m new.o5m --diff -o=changefile.o5c

Andere Operationen, wie zum Beispiel das Anwenden regionaler Grenzen, können in diesem Fall nicht gleichzeitig durchgeführt werden. Beide Dateien müssen nach Objekttyp und ID sortiert sein. Neu erstellte Objekte werden als "modified" in die Ausgabedatei geschrieben, außer sie haben Versionsnummer 1.

Beim Berechnen von Dateiunterschieden orientiert sich osmconvert an den Versionsnummern der jeweils zu vergleichenden Objekte. Wurden die Versionsnummern vorher herausgefiltert oder sollen die Objekte aus anderen Gründen inhaltlich miteinander verglichen werden (etwa, weil es sich um gefilterte Objekte handelt), kann man das mit der Option --diff-contents erreichen (klappt nur mit Dateien im .o5m-Format).

osmconvert speichert zu löschende Objekte grundsätzlich nur mit ID und Versionsnummer (und ggf. Autor-Daten), aber ohne Inhalt. Dies hat sich bewährt, weil es vom Verfahren her überflüssig ist, Information zu transportieren, die gleich wieder gelöscht wird. Manche Programme erwarten jedoch bei Knoten aus formalen Gründen die Angabe von Längen- und Breitengrad, um diese dann im nächsten Schritt wieder zu löschen. Mit der Option --fake-lonlat können Ersatzwerte für Längen- und Breitengrad hinzugefügt werden.

Zeitstempel vorgeben

OSM-Dateien enthalten in der Regel einen Zeitstempel. Dieser bleibt bei Dateiumwandlungen erhalten, er kann aber auch von Hand vorgegeben oder verändert werden. Beispiel:

./osmconvert hamburg.o5m --timestamp=2011-08-01T23:50:00Z -o=hamburg.o5m

Ermitteln statistischer Daten

Es gibt verschiedene Wege, die Metadaten oder die statistischen Daten einer OSM-Datei anzuzeigen. Zum einen kann mit --out-timestamp der Datei-Zeitstempel ausgegeben werden (das Z am Ende des Zeitstempels steht für Zulu):

./osmconvert Datei_mit_Zeitstempel.o5m --out-timestamp
2011-08-01T23:50:00Z
./osmconvert Datei_ohne_Zeitstempel.o5m --out-timestamp
(invalid timestamp)

Zum anderen kann mit --out-statistics die gesamte Datei analysiert werden. Ausgegeben werden dann verschiedene statistische Daten. Beispiel:

./osmconvert germany.osm.pbf --out-statistics

timestamp min: 2005-07-05T02:14:17Z
timestamp max: 2011-07-31T19:59:46Z
lon min: -20.0712330
lon max: 21.1441799
lat min: 47.0830289
lat max: 59.9982830
nodes: 78138447
ways: 11342322
relations: 176024
node id min: 1
node id max: 1380816490
way id min: 92
way id max: 123952798
relation id min: 159
relation id max: 1693098

Schreiben von CSV-Dateien

Um als Ausgabe eine Zeichen-separierte Tabelle, eine so genannte CSV-Datei zu erhalten, kann das Ausgabeformat ".csv" gewählt werden. Am einfachsten geht das mit der Option -o=, zum Beispiel -o=my_table.csv . Auch die verwandten Optionen --out-csv , --csv= , --csv-headline und --csv-separator= schalten die Ausgabe um auf das .csv-Format.

Die so erzeugte Tabelle besitzt drei durch Tab-Zeichen getrennte Spalten: Objekttyp-Name, Objekt-ID, Name. Um das Tab-Zeichen durch andere Zeichen zu ersetzen oder um andere Spalten zu wählen, muss die Option --csv-separator= bzw. die Option --csv= mit angegeben werden. Genauere Informationen sind über die Hilfe erhältlich: Option --help . Hier ein Anwendungsbeispiel (in Kombination mit der Option --all-to-nodes ):

./osmconvert shops.osm --all-to-nodes --csv="@id @lon @lat amenity shop name" --csv-headline
@id               @lon        @lat        amenity  shop       name
21548298          11.6122123  48.6884848  shop     bakery     Miller
21552613          9.0651970   49.9979332  shop     butcher    Jaeger
1000000168276611  6.6058085   51.4556093  shop     drugstore  AllForYou

Die Spalten erscheinen getrennt durch Tab-Zeichen der Standardgröße des Betriebssystems. Falls die Ausgabe in eine Datei geschrieben werden soll, empfiehlt es sich, die Option -o=dateiname.csv zu verwenden.

Funktionen kombinieren

Die meisten der vorgestellten Funktionen können kombiniert werden. So ist es beispielsweise möglich, eine OSM-Datei zu aktualisieren und gleichzeitig geografisch zu begrenzen:

./osmconvert day24.osm -B=p.poly c24_25.osc -o=day25.osm

Parallelverarbeitung

osmconvert unterstützt selbst keine parallele Verarbeitung, jedoch lassen sich für diesen Zweck recht leicht die Funktionen des Betriebssystem nutzen. Das ist besonders dann nützlich, wenn mehr als eine .pbf-Datei zur gleichen Zeit verarbeitet werden soll, da osmconvert dies nicht von Haus aus unterstützt. Hier ein Beispiel:

./osmconvert region1.pbf --out-o5m | ./osmconvert - region2.pbf -o=all.pbf

In diesem Beispiel liest der erste Prozess die .pbf-Datei "region1.pbf" und gibt sie über die Standardausgabe aus. Der zweite Prozess liest diese Daten über die Standardeingabe, vermengt sie mit der anderen regionalen Datei "region2.pbf" und schreibt sie in die Datei "all.pbf". Das Minuszeichen im zweiten osmconvert-Befehl sorgt dafür, dass an dessen Stelle keine Datei, sondern die Standardeingabe gelesen wird. Der Pipe-Operator "|" verbindet die Standardausgabe des ersten Befehls mit der Standardeingabe des zweiten Befehls.

Ebenso ist es möglich, mehr als eine Pipe zu verwenden, in dem man so genannte Named Pipes erzeugt. Leider funktioniert das nicht unter Windows. Bei Linux gibt es für diesen Zweck das Kommando mkfifo. Solche Pipes können genauso wie Dateien angesprochen werden. In diesem Beispiel werden drei Prozesse erzeugt, um drei .pbf-Dateien miteinander zu vermengen:

mkfifo p1 p2
./osmconvert a.pbf --out-o5m -o=p1 & ./osmconvert ./osmconvert b.pbf --out-o5m -o=p2 & ./osmconvert p1 p2 c.pbf -o=all.pbf

Die &-Operatoren werden für die jeweils links davon stehenden Kommandos eigene Hintergrundprozesse starten. Der letzte Befehl bleibt im Vordergrund und sammelt die von den Hintergrundprozessen erzeugten Daten.

Parameter-Datei

Die Kommandozeilen-Optionen können lang werden, wenn komplizierte Verarbeitungen durchgeführt werden sollen. In solchen Fällen empfiehlt sich die Verwendung einer Parameter-Datei. Beispiel:

./osmconvert --parameter-file=meine_parameter

Datei "meine_parameter":

-v

// Eingabedatei
planet.o5m

// begrenzendes Rechteck
-b=8.123,10.123,9.456,11.456

--complete-ways

-o=region.o5m

Die einzelnen Optionen müssen durch Leerzeilen getrennt werden. Zeilenwechsel innerhalb von Optionen werden in Leerzeichen umgewandelt. Mit "// " beginnende Zeilen werden als Kommentar betrachtet und vom Programm ignoriert.

Technische Details

Temporäre Dateien

Für manche Operationen legt osmconvert temporäre Dateien an und löscht diese anschließend wieder. Diese Dateien sind eher klein – jedenfalls im Vergleich zu den verarbeiteten OSM-Dateien. Ihr Name beginnt mit "osmconvert_tempfile" und endet mit einer Nummer. Der Linke Teil des Namens sowie der Dateipfad können vom Benutzer geändert werden. Beispiel:

./osmconvert germany.pbf -B=n.poly -t=/media/hd70/temp -o=nuernberg.o5m

Speicherverwaltung

Mit den Optionen --hash-memory=, --max-refs= und --max-objects= kann die Nutzung des Hauptspeichers beeinflusst werden. Details hierzu sind in der ausführlichen Hilfe zum Programm beschrieben. Anzeige der Hilfe (englisch):

./osmconvert --help

Testausgaben

Manchmal ist es hilfreich, während des Programmlaufs zusätzliche Testausgaben zu erhalten. Diese können mit -v (für englisch verbose, "wortreich") eingeschaltet werden. Mit -v=2 erhält man zusätzlich noch detailliertere Testausgaben.

Benchmarks

Bitte ergänzt hier Eure Benchmark-Ergebnisse.

Planet .o5m -> Germany .o5m

Ausschneiden der Deutschland-Daten aus den Welt-Daten unter Nutzung des Deutschland-Polygons von Geofabrik:

./osmconvert planet.o5m -B=germany.poly -o=germany.o5m

Ungefähr 5 Minuten auf einem PC mit i7-Prozessor und SSD, bei Verwendung nur eines Kerns (Mai 2017).

Benchmarks auf einem Europa-Ausschnitt der Geofabrik

Die Benchmarks wurden Anfang Mai 2016 vom TobWen durchgeführt.

  • CPU i7-4790K mit 4.00 GHz (4.4 GHz Turbo-Core)
  • Arbeitsspeicher: 16 GB DDR3
  • 2x Samsung 850 Pro SSDs mit 256 GB Kapazität; formatiert mit ext4, gemounted mit defaults,nofail,noatime
  • 3x WD Blue mit 1 TB Kapazität (WD10EZEX) in einem RAID-5 (mdadm); formatiert mit ext4, gemounted mit defaults,nofail,noatime
  • Betriebssystem: Debian Jessie mit Kernel v3.16.0-4
  • osmconvert: v0.8.5

Die Messwerte geben jeweils den zweiten Testdurchlauf wieder.

pbf zu o5m

  • Befehl: ./osmconvert europe-160428.osm.pbf --out-o5m > europe-160428.o5m
  • Größe der pbf-Datei: 18175619473 Byte (16,93 GiB bzw. 18,18 GB)
  • Größe der o5m-Datei: 33302747036 Byte (31,02 GiB bzw. 33,303 GB)
  • Zuwachs durch Umwandlung: 83,23 Prozent
Quelle Ziel Laufzeit in Sekunden Laufzeit in Minuten (gerundet)
RAID RAID 554,928 9,25
SSD1 528,881 8,82
SSD2 529,106 8,82
SSD2 RAID 503,722 8,4
SSD1 496,622 8,28
SSD2 514,689 8,58

pbf & o5m in verschiedenen Aktionen

Mithilfe des POLY-Formats und des Parameters "-B" wurde im Folgenden ein Bereich aus dem Europa-Ausschnitt extrahiert. Dieser beinhaltet Deutschland, ca. 25 % der östlichen Nachbarn, ca. 33 % der südlichen Nachbarn (Österreich und Schweiz), 25 % des westlichen Frankreichs sowie 100 % von Belgien, Luxemburg und den Niederlanden.

Tipp: Zur Mehrfachsortierung einfach die Shift-Taste beim Klick auf die Sortierungsrichtung gedrückt halten.

Laufzeit in Sekunden
Quelle Ziel Befehl Quelle PBF Quelle O5M
RAID SSD1 --out-o5m 405,042 346,567
--drop-author 378,538 319,832
--complex-ways 779,540 650,164
--drop-broken-refs 408,913 345,633
--complete-ways 703,639 589,502
RAID --out-o5m 409,829 358,678
--drop-author 384,347 332,084
--complex-ways 787,869 641,395
--drop-broken-refs 416,317 366,533
--complete-ways 712,809 611,281
SSD1 RAID --out-o5m 378,852 289,525
--drop-author 354,049 263,410
--complex-ways 727,733 535,048
--drop-broken-refs 383,651 295,522
--complete-ways 648,867 475,892
SSD2 --out-o5m 375,437 287,862
--drop-author 347,826 262,145
--complex-ways 722,827 506,321
--drop-broken-refs 380,087 293,336
--complete-ways 647,611 472,527
SSD1 --out-o5m 376,301 298,610
--drop-author 348,887 271,508
--complex-ways 723,640 515,680
--drop-broken-refs 379,982 307,288
--complete-ways 645,900 490,704

Und passend dazu die Veränderung der Größe zur Originaldatei im o5m-Format:

Befehl Größe Verkleinerung in Prozent
--out-o5m 10713787640 67,83
--drop-author 8339110364 74,96
--complex-ways 10736617171 67,76
--drop-broken-refs 10711295535 67,84
--complete-ways 10719445324 67,81

Kurze Interpretation

Eine schnelle Ranganalyse ergibt folgende Abfolge von schnell zu langsam; hierbei ist aber zu beachten, dass die Standardabweichung pro Befehl nur 0,5 bis 1 Minute beträgt.

  1. SSD1 zu SSD2
  2. SSD1 zu SSD1
  3. SSD1 zu RAID
  4. RAID zu SSD1
  5. RAID zu RAID

Es macht ferner – unter der vom TobWen durchgeführten Prozesskette – augenscheinlich keinen Sinn, eine eingehende pbf-Datei erst ins o5m-Format zu überführen, wenn man mit einem Europa-Ausschnitt arbeitet. Die Überführung des kompletten Ausschnitts dauert zwischen drei bis neun Mal länger, als die direkte Arbeit auf der pbf-Datei mit Ausgabe in o5m.