Hallo,
wie stelle ich es am geschicktesten an, alle Grenzen aus einer pbf-Datei mit osmfilter zu extrahieren.
Schritt 1 wäre mit pbftoosm ein osm-xml-File zu erzeugen
Im 2. Schritt wollte ich dann mit osmfilter filtern. Als Ergebnis brauche ich alle Relationen mit boundary=administrative und alle ways mit selbigem Tag in einer osm-xml oder pbf-Datei.
Oder wäre es effektiver das pbf in ein o5m zu wandeln und mit 05mfilter zu bearbeiten und dann wieder nach osm-xml zu konvertieren?
Wenn es DIr wichtig ist, pbftoosm, o5mfilter, osmfilter oder andere moderne Digne zu nutzen, habe ich keine Antwort. Aber mit einem halbwegs aktuellen Osmosis geht das direkt vom PBF so:
Damit hast Du zwei Dateien, eine mit den Relationen (und allem, was dazugehoert) und eine mit den Ways. Du kannst auch beides in einem Schritt erzeugen lassen (Stichwort --tee). Viele Ways werden in beiden Dateien enthalten sein; Du kannst beide Dateien wieder zu einer zusammensetzen lassen und dabei Dubletten entfernen (Stichwort --merge). Das allerdings muss tatsaechlich in einem separaten Schritt erzeugen, denn das Wiederzusammenfuegen von zwei mit --tee gesplitteten Streams sorgt bei Osmosis fuer ein Problem, da haengt es sich auf.
Hallo Frederik,
ich wollte mal einen Vergleich machen, ob es mit osmosis oder mit obigen Tools schneller geht. Der Weg über osmosis ist mir bekannt und läuft auch, dauert halt nur etwas.
Der Standardweg wär mit dem Alleskönner Osmosis, da hat Frederik völlig recht. Über die Alternative könnte es schneller gehen, verglichen hab ich das allerdings noch nicht.
Das Einzige, wozu o5mfilter zu doof ist, ist eine PBF-Datei zu schreiben. Alles andere sollte ohne Probleme gehen. Als Eingabeformat für o5mfilter ist .osm (XML) zwar möglich, aber .o5m lässt sich viel schneller verarbeiten (auch schneller als .pbf). Mein Vorschlag wäre dieses:
Hallo Marqqs!
Behält o5mfilter mit --keep=“boundary=administrative” auch die Grenzen, die nur als Relation in den Daten schlummern und die zu den Relationen gehörenden Weg? Dann werde ich das gleich mal versuchen.
Ja, tut es. Auch die Nodes, die zu diesen Wegen gehören, sind dann im Ergebnis.
Streng genommen wären im Ergebnis sogar andere Nodes, die diesen Tag selber besitzen, aber da dürfte es kaum welche geben. Wenn du aber solche Nodes ausschließen willst, kannst du die Filter für die Objekttypen gezielt vorgeben. Für Nodes also einen leeren Filter, dann sind sie nur dann im Ergebnis, wenn sie zu einem betroffenen Weg gehören.
Meine alte Mühle hat eine ganze Weile gerechnet. Fairerweise müsstest du bei der Alternative mit o5mfilter die Zeit für die Datenumwandlung von .pbf nach .o5m hinzurechnen, denn .o5m ist bis jetzt noch ein eher wenig verwendetes Format. Außer, du willst die Basis mehrfach verwenden und nach unterschiedlichen Kriterien filtern. Hier die Ergebnisse (Ubuntu 10.04, 32 Bit, Intel Atom).
$ time ./osmconvert germany.osm.pbf --out-o5m >germany.o5m
real 4m8.948s
user 3m56.455s
sys 0m10.353s
$ time ./o5mfilter germany.o5m --keep-nodes= --keep-ways-relations="boundary=administrative" >grenzen.osm
real 2m43.116s
user 2m17.365s
sys 0m7.792s
Die Ergebnisdatei “grenzen.osm” ist bei mir 270.262.836 Bytes groß. Sie lässt sich mit JOSM öffnen, dauert halt ein bisschen.
Und wie sieht Osmosis im Vergleich dazu aus? Und sind die Daten vollständig? Das wären jetzt Entscheidungshilfen für andere Nutzer. Ich habe ja bereits positive Erfahrungen damit gemacht.
Würde mich auch interessieren. Vollständigkeit ist letztlich ja wichtiger als Geschwindigkeit. Zwei Problempunkte:
Osmosis: Die Option cascadingRelations=yes ist wichtig, weil sonst Unterrelationsn fehlen können.
o5mfilter: Das Programm ist recht neu, so dass ich da lieber zweimal hinschauen würde. Bugs sind wahrscheinlicher als bei Osmosis.
Vielleicht könnte man o5mfilter mit der Option –emulate-osmosis laufen lassen und das Ergebnis dann per diff vergleichen. Mit dieser Option schreibt o5mfilter die Daten in dem Format, das auch Osmosis verwendet (Leerzeichen statt Tabs, XML-Reihenfolge innerhalb der Header-Tags usw.). Sollte es jedenfalls.
die Fehlermeldung kommt aus zlib. Der Ausgabepuffer ist angeblich zu klein. Da er mit 32 MB dimensioniert ist, hält sich das gelesene PBF nicht an die Spezifikationen. Oder – was viel wahrscheinlicher ist: da ist ein Bug im Programm. Oder… es gibt wieder ein Problem mit der Windowsversion und der 2-GB-Grenze für Dateien. Sollte aber gefixt sein.
Kannst du bitte sagen, welche Programmversion du benutzt? Und, ist es die europe.osm.pbf-Version von heute? Ich geh der Sache dann auf den Grund.
Hallo Markus,
ich hab Version 0.1C für Windows genutzt. Das Problem hatte ich mit der europe.osm.pbf von der GeoFabrik von gestern (-5) und heute (-3).
Hallo - hab das Problem immer noch nicht erwischt.
Mit Version 0.0E unter Ubuntu (32 Bit) läuft alles glatt. Gleiches gilt für die Windows-Version unter Wine.
Ich bereite grad einen Test für 32-Bit-Windows vor. 64-Bit-Windows hab ich im Moment nicht greifbar.
Hast du eigentlich die osmconvert.exe runtergeladen oder selber mit MinGW übersetzt?
Wenns dir möglich ist, übersetz bitte mal neu mit MinGW unter Win64.
Ich hab grad unter Win32 (XP Pro) getestet, da läufts einwandfrei. Bin jetzt auf der Suche nach einer Win64-Installation. Sobald mir eine unter die Finger kommt, werd ich testen.
DANKE!
Aber ich wüsste jetzt nicht wie. Außer, du willst dich wirklich in den Quellcode reinwühlen.
Vielleicht hab ich übermorgen die Gelegenheit, mit Win64 zu testen.
Interessant wäre noch zu erfahren, ob es bei pbftoosm zur gleichen Fehlermeldung kommt. Oder ob die Meldung bei ca. 2 oder 4 GB Dateiposition auftritt. Aber das ist dann schon wieder Forschungsarbeit. Ich kümmer mich am besten mal um eine 64-Bit-Version.