Apptiva Logo

Geodaten von OpenStreetMap abfragen

OpenStreetMap ist ein Community-Projekt ähnlich wie Wikipedia. Es wurde 2006 (also 5 Jahre nach Wikipedia) gegründet. Mittlerweile ist es die grösste freie Geodatenbank der Welt. Wir schauen uns an, wie man programmatisch Daten von OpenStreetMap abfragen kann.

Publiziert am von Roman Schaller

OpenStreetMap ist ein Community-Projekt ähnlich wie Wikipedia. Es wurde 2006 (also 5 Jahre nach Wikipedia) gegründet. Mittlerweile ist es die grösste freie Geodatenbank der Welt.

Die Datenbank enthält Unmengen von Daten. Um den Detaillierungsgrad etwas zu veranschaulichen ist hier eine kleine Liste von ein paar Datentypen, die gepflegt werden:

  • Strassen mit Strassennamen, Beschaffung der Oberfläche, Fahrtrichtung, maximale Gewschwindigkeit uvm.
  • Diverse Infos zu Fahrrädern wie “Gibt es einen Fahrstreifen”. Ist dieser von den Autos getrennt., In welche Richtung dürfen Fahrräder fahren.
  • Natürlich alle Gebäude
  • Art von Gebäuden und Geschäften (Schule, Unternehmen, Bäckereien usw.)
  • Standort von Sirenen
  • Fahnenstangen

Weil da so viel frei verfügbar ist, basieren auch ganz viele Kartendienste mittlerweile auf dieser Datenbank.

Daten durchforsten

Die Datenbank besteht grundsätzlich aus Nodes (Punkten), Ways (Linien) und Beziehungen. Diese haben alle Unmengen von Eigenschaften. Eine Herausforderung ist es, erst einmal herauszufinden, an welchen Eigenschaften wir überhaupt interessiert sind. Das lässt sich gut über https://www.openstreetmap.org herausfinden.

Daten abfragen

Anschliessend gehts ans Eingemachte: die Queries. Grundsätzlich gibt es zwei APIs:

  • Die generelle REST-API. Die ist optimiert um die Daten zu manipulieren. Darauf gehen wir jetzt nicht ein.
  • Die Overpass-API. Die ist dagegen fürs Lesen optimiert. Also genau das, was wir brauchen.

Mit Overpass kann man Live-Abfragen machen. Es ist aber auch möglich, damit relativ grosse Datasets herunterzuladen und dann offline zu verwenden.

Beispiele

Möglicherweise dürfen wir in einem künftigen Projekt Daten aus OpenStreetMap verwenden. Darum habe ich hier schon mal ein paar Beispiele zusammengestellt, um ein Gefühl dafür zu bekommen. Mit https://overpass-turbo.eu/ kann man Queries erstellen und ausführen. Natürlich gibt es auch APIs für JavaScript. Schlussendlich ist es ein einfaches Web-API, das auch ohne spezielle Client-Library gut zugänglich ist.

Zeige mir die Kreisel

Folgendes Query markiert alle Kreisel in der Aktuellen Ansicht von Overpass:

[out:json][timeout:25]; // Dies ist die generelle Settings-Zeile
// Eckige Klammern sind Bedingungen für Eigenschaften
// Die runden Klammern sagen aus, wo gesucht werden soll.
way["junction"="roundabout"]({{bbox}});
out geom;

Strassen / Wege in der Nähe eines Punktes

Wir können in runden Klammern auch angeben, wo gesucht werden soll. In diesem Fall ist das ein Umkreis von 1000 Metern ausgehend von einem GPS-Punkt:

[out:json][timeout:25];
way["highway"](around:5, 47.2120179, 7.7889963);
out geom;

Strassen, die daran anschliessen

Das Ergebnis von vorhin können wir auch weiterverarbeiten. Wir nehmen hier alle Nodes (Punkte) des Weges. Diese verarbeiten wir wieder weiter und holen uns alle Wege, bei denen die Punkte irgendwie involviert sind.

[out:json][timeout:25];
way["highway"](around:5, 47.2120179, 7.7889963);
node(w); // gib die Nodes von obigem Resultat zuürck
way(bn); // Gib alle Ways zurück, in denen obige Nodes involviert sind.
out geom;