DE:Osmfilter

From OpenStreetMap Wiki
Jump to navigation Jump to search

osmfilter ist ein Kommandozeilentool, das aus OSM-Planetfiles Daten mit ausgewählten Tags heraus filtert. Es ist möglich verschiedene Arten von Filtern zu definieren, mit denen OSM-Objekte (d.h. Punkte, Wege und Relationen) einschließlich der zugehörigen Objekte (z.B. Punkte von Wegen, Wege von Relationen, Relationen von anderen Relationen) extrahiert werden können.

Unterstützte Eingabe- und Ausgabe-Formate sind das .osm-Format und das .o5m-Format. Um schnelleres Filtern zu ermöglichen, wird empfohlen, das .o5m-Format zumindest für die Dateneingabe zu verwenden. Das Programm osmconvert hilft bei entsprechenden Formatumwandlungen. Zum Beispiel: ./osmconvert file.pbf -o=file.o5m

Download

Folgende Downloads sind erhältlich:

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

Beschreibung des Programms

Um das Programm auszuführen ist unter Linux wie Windows gleichermaßen eine Kommandozeile erforderlich. Unter Windows kann diese meist durch die Eingabe von "cmd" in das Suchen/Ausführen-Feld des Startmenüs geöffnet werden.

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

./osmfilter --help

Eine Übersicht über alle Optionen wird unter Linux angezeigt mit:

./osmfilter -h

Die folgenden Absätze zeigen die wichtigsten Anwendungsbeispiele.

Objekt-Filter

Filter dieser Kategorie beziehen sich immer auf ganze Objekte (Punkte, Wege oder Relationen), das heißt, sie entscheiden, ob das jeweilige Objekt als Ganzes erhalten bleibt oder komplett aus der Datei ausgeschlossen wird.

Bestimmte Objekte und ihre Mitglieder behalten

./osmfilter norway.osm --keep="highway=primary =secondary waterway=river" -o=streets.osm
./osmfilter switzerland.o5m --keep="highway=cycleway and lit=yes" -o=litcycles.osm
./osmfilter europe.o5m --keep= --keep-relations="route=bus" -o=bus_lines.o5m
./osmfilter bayern.o5m --keep="admin_level=6 and name=Nürnberger\ Land" -o=nbg_boundaries.osm

Der Backslash "\" erlaubt auch Leerzeichen innerhalb von Schlüsselnamen oder Werten.

Objekte eines bestimmten Typs behalten

Um beim Filtern nur Objekte eines bestimmten Typs zu behalten, müssen Filter auch für die beiden anderen Objekttypen definiert werden. Um beispielsweise nur Punkte mit dem Tag fixme zu behalten, wird eines dieser Kommandos verwendet:

--keep-nodes="fixme=" --keep-ways= --keep-relations=
--keep= --keep-nodes="fixme="

Bestimmte Objekte ausschließen

./osmfilter europe.o5m --keep="highway=" --drop="access=no" -o=good_ways.osm

Alle Punkte, Wege oder Relationen ausschließen

Mit den folgenden Optionen können alle Objekte eines bestimmten Typs ausgeschlossen werden (Kombinationen sind zulässig):

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

Erweitertes Objekt-Filtern

Abhängigkeiten zwischen Objekten ignorieren

Wenn ein Objekt behalten wird, gilt das normalerweise auch für alle seine Unterobjekte. Beispielsweise schließt der Filter --keep="highway=" nicht nur alle Straßen ein, sondern auch alle dazugehörenden Punkte. Gleiches gilt sinngemäß für Relationen und deren Mitglieder. Falls dieses Verhalten nicht gewünscht ist, kann es mit der folgenden Option abgeschaltet werden:

--ignore-dependencies
Boolesche Operatoren

Zum definieren komplizierter Filter können die booleschen Operatoren and und or verwendet werden. Der erste hat eine höhere Priorität als der zweite, das heißt, Und-Ausdrücke werden grundsätzlich zuerst berechnet. Diese Reihenfolge kann durch die Verwendung von Klammern geändert werden. Klammern müssen durch ein Leerzeichen von jeder anderen Klammer, jedem Operand und Operator getrennt werden. Beispiel für einen booleschen Ausdruck:

--keep="place=city or ( place=town and population>=10000 )"
Vergleiche

Sechs verschiedene Vergleichsoperatoren dürfen verwendet werden:

= != < > <= >=

Das Programm vergleicht grundsätzlich in ASCII-alphabetischer Folge. Je nach Sprache ist diese Reihenfolge möglicherweise nicht korrekt. Der auffälligste Unterschied ist, dass alle Großbuchstaben vor dem ersten Kleinbuchstaben einsortiert sind.

Für Zahlen erfolgt der Vergleich numerisch. Das bedeutet, dass "2" vor "10" kommt, obwohl das bei alphabetischem Vergleich genau andersherum wäre.

Platzhalter

Bei der Definition von Vergleichen mit "=" dürfen für die Werte Platzhalter verwendet werden. Sie sind am Anfang und am Ende zulässig. Zum Beispiel:

--keep="name=main* and highway=*ary and source=*aerial*"
Besondere Tags

Falls es notwendig sein sollte, Metadaten zu vergleichen, können die folgenden Ausdrücke in Filterdefinitionen verwendet werden:

@id @uid @user

Tag-Filter

Tag-Filter beziehen sich immer nur auf einzelne Tags. Damit lässt sich festlegen, welche Tags erhalten bleiben und welche ausgeschlossen werden.

Bestimmte Tags behalten

./osmfilter a.o5m --keep-tags="all amenity=restaurant =fast_food" -o=food.osm
./osmfilter a.o5m --keep-tags="all highway= waterway= name=" -o=ways.o5m

Bestimmte Tags ausschließen

./osmfilter a.o5m --drop-tags="oneway= name=" -o=plain_ways.o5m

Autor-Informationen ausschließen

Die meisten Programme benötigen keine Autor-Informationen. Mit der Option --drop-author können Benutzername, Benutzer-ID, Timestamp und Changeset vom Filterergebnis ausgeschlossen werden. Beispiel:

./osmfilter a.o5m --keep="route=" --drop-author -o=b.o5m

Autor-Informationen und Versionsnummer ausschließen

Um neben der Autor-Informationen auch die Versionsnummern auszuschließen, kann diese Option verwendet werden (Beispiel):

./osmfilter a.o5m --keep="route=" --drop-version -o=b.o5m

Bitte beachten, dass viele Programme mit den Daten nicht mehr arbeiten können, sobald die Versionsnummer ausgeschlossen wurde.

Tag-Modifizierer

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:

./osmfilter 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:

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

Tags hinzufügen

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

./osmfilter 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 benutzen, um Kollisionen zu vermeiden.

Tag-Statistik berechnen

Um zu entscheiden, welche Objekte oder Tags behalten werden sollen und welche ausgeschlossen werden können, ist eine Übersicht über alle in einer Datei genutzten Tags hilfreich. Die folgenden Abschnitte zeigen die verschiedenen Format anhand von Beispielen. Alle Beispiel-Ausgaben wurden auf 10 Zeilen begrenzt.

Liste aller Schlüssel

./osmfilter bremen.o5m --out-key
          5	Boden
          1	EE
         84	FIXME
          1	Fone
          7	StrVz
        113	TMC:cid_58:tabcd_1:Class
         78	TMC:cid_58:tabcd_1:Direction
        107	TMC:cid_58:tabcd_1:LCLversion
        110	TMC:cid_58:tabcd_1:LocationCode
         47	TMC:cid_58:tabcd_1:NextLocationCode

Die erste Spalte zeigt an die jeweilige Anzahl des Auftretens.
Um eine Gruppe benachbarter Schlüssel zu definieren, kann das Platzhalterzeichen "*" verwendet werden. Zum Beispiel:

--out-key=addr:*

Liste aller Schlüssel, sortiert nach Häufigkeit

./osmfilter bremen.o5m --out-count
      28199	highway
      22794	building
      21365	name
      18754	created_by
      17751	source
      11842	addr:housenumber
      11835	addr:street
       5925	addr:postcode
       5724	foot
       5543	addr:city

Liste aller Werte eines Schlüssels

./osmfilter bremen.o5m --out-key=railway
        156	abandoned
          6	abandoned_tram
         16	buffer_stop
          2	bumper_stop
          9	construction
         31	crossing
         31	disused
          8	halt
        269	level_crossing
         38	platform

Liste aller Werte eines Schlüssels, sortiert nach Häufigkeit

./osmfilter bremen.o5m --out-count=railway |head
       1570	rail
        269	level_crossing
        192	tram
        182	tram_stop
        156	abandoned
        126	spur
         81	razed
         38	platform
         31	crossing
         31	disused

Parameter-Datei

Die Kommandozeilenparameter können sehr lange werden wenn man komplexe Filter definiert. In diesem Fall ist es günstiger, eine Parameterdatei zu verwenden und darauf mit --parameter-file= zu verweisen. Zum Beispiel:

./osmfilter europe.o5m --parameter-file=my_parameters >line_1.o5m

Datei "my_parameters":

-v

--keep=

--keep-relations=
all
route=bus
line=1

--drop-tags=
operator=
direction=

--out-o5m

Die einzelnen Parameter werden durch Leerzeilen getrennt. Zeilenwechsel innerhalb von Parametern ersetzt das Programm durch Leerzeichen.

Benchmarks

(Bitte ergänzen.)