OSM Daten extrahieren

Durch die Wochennotiz Nr. 246 „Sirenen“ kam ein Kontakt zwischen Herr Hense (Stadt Bonn) und mir zustande. Nach einer kurzen E-Mail Kommunikation wurde ich zum OKLab-Bonn Meeting in das Bonner Stadthaus eingeladen. Dieses Treffen kam im Rahmen der Initiative CodeForBonn zustande. Ziel dieser Meetings ist die Anwendungsentwicklung auf Basis von offenen Daten für die Stadtgesellschaft.

In diesem Rahmen habe ich u.a. die Briefkastenkarte vorgestellt, welche auf großes Interesse gestoßen ist. Es gab außerdem die Idee, dass ein zuvor definierten Datenbestand aus OSM extrahiert und im OpenData Portal der Stadt Bonn bereit stellt wird. Beispielsweise könnte innerhalb einer Projektwoche an Schulen solch ein aufbereiteter Datensatz verwendet werden, ohne aus der Datenvielfalt die entsprechenden Daten zu filtern.

Mehr zum OpenData Portal der Stadt Bonn und CodeForBonn gibt es unter: http://opendata.bonn.de/blog/oklabbonn.

Meiner Meinung nach bieten sich zwei Möglichkeiten an, um die Daten im OpenData Portal bereitzustellen:

  1. Verwendung der Overpass API mittels Filtern
  2. Extrahieren aller Geodaten in Bonn aus dem OSM Planet File

Overpass API

Vorteil bei der Verwendung der Overpass API wäre, dass die Datenhaltung und somit auch die Aktualität der Daten in der Hand der OSM Community verbleibt, da bei dieser Variante lediglich eine URL (mit Filtern) in das OpenData Portal verlinkt werden würde.

Nachteil: Traffic und Auslastung liegt bei Overpass.

Planet File

Vorteil ist, dass nach dem Download die Verarbeitung auf den eigene Servern, sodass die Daten ggf. auch aufbereiten werden können. Für die Stadt Bonn ist ein Extrakt wesentlich sinnvoller, da ein Planet File ca. 40GB (komprimiert) groß ist.

How-to

Heute möchte ich gerne die zweite Möglichkeit als How-to abhandeln. Die Geofabrik stellt bereits Extrakte aus dem Planet File bereit, sodass hier Traffic und Zeit gespart werden kann. Um den gesamten Geodatenbestand aus OSM für die Stadt Bonn zu extrahieren, benötigten wir das kleinste Extrakt, welches verfügbar ist. In unserem Fall ist es der Regierungsbezirk Köln (123 MB – komprimiert).

Die OSM Daten können unter der URL herunter geladen werden:

Des Weiteren benötigen wir die Grenze der Stadt Bonn, sodass wir später die OSM Daten ausschneiden bzw. ermitteln können:

Anschließend muss aus der XML-Datei eine Polygon-Datei erstellt werden. Hierfür wurde eine modifizierte Version von osm2poly.pl verwendet (siehe Talk-de oder GitHub):

./osm2poly.pl bonn_administrative.osm > bonn_administrative.poly

Im Anschluss können wir anhand der Polygon-Datei unser benötigtes Gebiet ausschneiden:

 osmconvert koeln-regbez-latest.osm.pbf -B=bonn_administrative.poly -o=bonn.o5m

Zum Schluss können wir nun nach einem bestimmten Key-Value-Pair filtern und das Ergebnis wieder als XML speichern, sodass wir dieses weiter verarbeiten können:

osmfilter bonn.o5m --keep="amenity=post_box" --out-osm > bonn_post_box.osm

Zum Überprüfen kann man nun die Datei bonn_post_box.osm in JOSM laden und überprüfen, ob der räumliche Ausschnitt passt.

osm_extract_post_box_josm

Wenn über mehrere Key-Value-Pairs gefiltert wird, so können mehrere Geodatenbestände erstellt werden.

Ihr seid dran

Mich interessiert, ob die oben dargestellte Lösung Zuspruch findet oder ob es nicht noch bessere, einfachere Lösungsmöglichkeiten gibt.