Geodaten aus OpenStreetMap extrahieren mit Osmfilter
Wenn ich an kartenbezogenen Projekten arbeite, benötige ich oft spezifische geographische Daten aus OpenStreetMap (OSM) aus einem bestimmten Gebiet. Für ein aktuelles Projekt von mir brauchte ich alle Straßen in Deutschland in einem brauchbaren Format, damit ich mit ihnen in einem GIS-Programm arbeiten kann. Wie bekomme ich also die Daten, mit denen ich arbeiten kann? Mit einem nützlichen kleinen Programm namens Osmfilter.
Es gibt verschiedene Seiten, die OSM-Datensätze für bestimmte Gebiete anbieten. Allerdings beinhalten diese Datensätze ALLE Geodaten, die OSM zur Verfügung stellt. Das bedeutet Häuser, Straßen, Flüsse etc. – im Grunde alles, was du auf einer normalen Karte siehst. Außerdem ist die Datei in einem für die direkte Nutzung eher unpraktischen Format. Ein ziemlich komplizierter Weg mit dem Datensatz umzugehen wäre, ihn in eine Datenbank zu laden und abzufragen, was du brauchst. Das kann zeitaufwendig und – je nach Leistung deines PCs – unmöglich sein.
Wenn du nur Infos über kleine Gebiete brauchst, empfehle ich dir die Seite overpass turbo. Für größere Datensätze gibt es Osmfilter, mit dem du OSM Geodaten einfach filtern kannst. Mit ein wenig Hilfe von zwei weiteren kostenlosen Tools hast du im Handumdrehen einen Datensatz, mit dem du arbeiten kannst.
Was du für dieses Tutorial brauchst
- Die folgenden Tools:
- osmfilter -> wiki.openstreetmap.org/wiki/Osmfilter
- osmconvert -> wiki.openstreetmap.org/wiki/Osmconvert
- ogr2ogr -> www.gdal.org/index.html
- Grundlegende Kenntnisse in der Kommandozeile / Shell / Bash.
OSM-Datensatz abrufen
Zu Beginn müssen wir einen OSM-Datensatz herunterladen, der in einem Format namens pbf gespeichert ist (ein Format zur Komprimierung großer Datensätze). Für dieses Tutorial werde ich einen Datensatz verwenden, der von geofabrik zur Verfügung gestellt wird, aber es gibt auch andere Quellen. Lade die pbf-Datei für Liechtenstein herunter und speichere sie in einem Ordner deiner Wahl. Sobald du die Daten heruntergeladen hast, öffne die Shell und gehe in den Ordner, in dem dein neuer Datensatz gespeichert ist, mit dem Befehl
cd path/to/folder
Bereite deine Daten vor
Osmfilter unterstützt nur die Dateiformate osm und o5m. Für eine schnelle Datenverarbeitung wird die Verwendung von o5m empfohlen. Du kannst deine pbf Datei nach o5m mit osmconvert in deiner Shell wie folgt konvertieren:
osmconvert liechtenstein-latest.osm.pbf -o=liechtenstein.o5m
Dies bedeutet übersetzt: Benutze das Programm osmconvert und konvertiere die Datei mit dem Namen liechtenstein-latest.osm.pbf in eine o5m-Datei mit dem Namen liechtenstein. Das -o steht für output.
Du hast nun den gleichen Datensatz im o5m Format im gleichen Ordner.
Filtere deine Daten
Nun kannst du deine Geodaten über die Shell, die noch geöffnet sein sollte, filtern. Die Logik des osmfilter-Befehls ist wie folgt aufgebaut:
osmfilter || input data || some filter commands || output data
Lass uns den Teil über die Filterbefehle anschauen. Hier kannst du dem Programm mitteilen, welche Teile des Datensatzes du benötigst, indem du schreibst --keep=DATA_I_WANT. Hier ist ein Beispiel, das für dich eine Datei namens Gebäude.osm erzeugt, die alle Gebäude (und nur die Gebäude) aus dem Liechtenstein-Datensatz enthält:
osmfilter liechtenstein.o5m --keep="building=" -o=schools.osm
Um herauszufinden, wie Features in OSM gespeichert und klassifiziert werden, kannst du auf diese Seite gehen und das gewünschte Feature nachschlagen. Tipp: Du kannst auf Overpass-Turbo gehen und deine Abfrage mit dem wizard auf einem kleinen Gebiet deiner Wahl testen.
Natürlich kannst du mit Osmfilter noch viel mehr machen. Du kannst festlegen, welchen Gebäudetyp du haben möchtest. Zum Beispiel könntest du dir nur Schulen ansehen wollen:
--keep="building=school”
Du kannst mehrere Merkmale abfragen, indem du sie verkettest. Wenn du zum Beispiel alle Schulen und Universitäten haben möchtest:
--keep="building=school=university”
Du kannst Dinge ausschließen, indem du das Flag drop hinzufügst. Zum Beispiel, wenn du keine Gebäude haben willst, die Lagerhäuser sind, aber alles andere behalten willst:
--drop="building=warehouse"
Die endgültige Dateigröße kannst du reduzieren, indem du zusätzliche Daten zu den Autor*innen und der Version weglässt, indem du hinzufügst:
--drop-author --drop-version
Du kannst diese Flags natürlich auch kombinieren. Hier ist eine Abfrage, die dir alle Autobahntypen liefert, die Autos in Lichtenstein benutzen können, ohne die, auf denen Kraftfahrzeuge nicht erlaubt sind:
osmfilter liechtenstein. o5m --keep="highway=motorway =motorway_link =trunk =trunk_link =primary =primary_link =secondary =secondary_link =tertiary =tertiary_link =living_street =residential =residential_link =unclassified " --drop="motor_vehicle=no" --drop-author --drop-version -o=streets_liechtenstein.osm
Mehr zu den Filtermöglichkeiten findest du auf der Osmfilter-Seite mit einigen Beispielen.
In ein nützliches Format umwandeln
Als letzten Schritt kannst du deine osm-Datei in das am weitesten verbreitete Geodatenformat, ein Shapefile, konvertieren (das GIS-Programm QGIS kann osm-Dateien verarbeiten, aber es funktioniert manchmal nicht gut mit großen Datensätzen). Du kannst deine osm-Datei mit dem Programm ogr2ogr wie folgt in ein Shapefile konvertieren:
ogr2ogr -skipfailures -f "ESRI Shapefile" streets_shapefiles streets_liechtenstein.osm
Der obige Befehl konvertiert die Datei streets_liechtenstein.osm in das Shapefile-Format und weist sie an, sie in einem Ordner namens streets_shapefiles zu speichern. In dem neu erstellten Ordner findest du vier verschiedene Shapefiles (eines für jeden Geometrietyp). Im Fall der Straßen sind wir nur an der Datei lines.shp interessiert. Diese Datei kannst du in einem GIS-Programm deiner Wahl öffnen.
Ogr2org ermöglicht es dir auch, deine neu erstellten Shapefiles in andere Geodatenformate zu konvertieren, die du vielleicht brauchst, wie GeoJSON, CSV und viele mehr. Wirf einen Blick auf die ogr2ogr Webseite für weitere Infos. Wenn du es leid bist, die Shell zu benutzen, probiere das Online-Tool Mapshaper, mit dem du deine Shapefile-Datei in Formate wie GeoJSON, SVG und CSV konvertieren kannst. Die Dateigröße für Mapshaper ist begrenzt, aber ich habe es mit Dateien größer als 1 GB ausprobiert.
Viel Spaß beim Filtern von OSM und frohes mappen!