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.

Weiterlesen

How-to OSM-Map

How to create a simple map like the Briefkastenkarte? This questions comes up during the last OSM meeting in Bonn. For the Briefkastenkarte I use Leaflet with numerous plug-ins. Therefore I use Leaflet for this How-to too.

 

Frame

Let’s start with a HTML page:

 

Leaflet

Now, you see a blank web page. To get the map, you need to do the following steps, like described in Leaflet Quick Start Guide. Adding Leaflet JavaScript and Style to your page.

With line 15 we will initialize the map and set its view to Bonn (geographical coordinates 50.7344700 7.0987190, zoom level 15).

Next we will add a background layer to our map. In this case I use OSM Mapnik.

Leaflet How-to Nr. 1

 

Overpass API

To portray the OSM data, the Leaflet Overpass API plug-in is used. Refer the plug-in in the HEAD section of the HTML document.

Do not use the plug-ins directly from GitHub. For production please download the plug-ins.

In line 10 we define the request, which is sent to the Overpass API. For each node, a circle is created. The color (red / green) is based on the interpretation of the attribute collection_times. Finally, the layer must be added to the map.

Leaflet How-to Nr. 2

Leaflet How-to Nr. 3

 

Summary

* Refer Leaflet
* Create map with background layer
* Refer Leaflet Overpass API Plug-ins
* Create Overpass API query

You can download the demo from my GitHub account. In a second part, I will explain how to customize the portrayal of search results.

Weiterlesen

How-to OSM-Themenkarte

Beim letzten Bonner OSM Stammtisch wurde gefragt, wie man eine einfache Karte erstellt. Für die Briefkastenkarte nutze ich selbst Leaflet, mit zahlreichen Plug-ins. Daher verwende ich für dieses kurze How-to ebenfalls Leaflet.

 

Grundgerüst

Starten wir mit einer HTML-Seite, welchen folgenden Inhalt beinhaltet:

 

Leaflet

Im Web-Browser sehen wir somit nur eine weiße, leere Seite. Anschließend wird, wie in dem Leaflet Quick Start Guide beschrieben, das Leaflet JavaScript sowie der Style eingebunden. In Zeile 15 wird eine Karte erstellt. Der Mittelpunkt der Karte liegt in Bonn (Koordinaten 50.7344700 7.0987190, Zoomstufe 15).

Um eine Karte sehen zu können, muss noch ein OSM Layer als Hintergrund eingebunden werden.

Leaflet How-to Nr. 1

 

Overpass API

Zur Darstellung der OSM Daten wird das Leaflet Overpass API Plug-in verwendet. Das Plug-in wird in den HEAD-Bereich des HTML-Dokumentes eingefügt.

Für den produktiven Einsatz des Leaflet Overpass API Plug-ins empfehle ich den Download der JavaScript-Datei.

In Zeile 10 definieren wir die Anfrage, welche an die Overpass API gesendet wird. Für jeden Node wird ein Kreis erstellt. Die Farbe (Rot / Grün) richtet sich nach der Auswertung des Attributes collection_times. Zuletzt muss der Layer zur Karte hinzugefügt werden.

Leaflet How-to Nr. 2

Leaflet How-to Nr. 3

 

Zusammenfassung

* Einbinden von Leaflet
* Erstellen der Karte mit zusätzlicher Hintergrundkarte
* Einbinden des Leaflet Overpass API Plug-ins
* Erstellen der Suchanfrage zur Overpass API

Das gesamte Beispiel könnte ihr von meinem GitHub Account herunterladen. In einem weiteren Teil werde ich erläutern, wie man die Darstellung der Suchergebnisse den eigenen Vorstellungen anpassen kann.

Weiterlesen