DE:Osmconvert
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
- Programmdatei für Linux 32 bit
- Programmdatei für Linux 64 bit
- osmctools Debian package, zum Installieren ausführen:
apt install osmctools
Windows
- Programmdatei für Windows 32 (lauffähig auch auf Windows 64 bit)
- Programmdatei für Windows 64 bit
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
- source code (aktuelle Version) (need to link zlib (i.e.
cc osmconvert.c -lz -o osmconvert
) - Download und Linken in einem Rutsch:
wget -O - http://m.m.i24.cc/osmconvert.c | cc -x c - -lz -O3 -o osmconvert
- osmctools-git-Repositorium
- 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.
- SSD1 zu SSD2
- SSD1 zu SSD1
- SSD1 zu RAID
- RAID zu SSD1
- 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.