So baut man eine immer aktuelle Karte ausgewählter Daten vor Ort aus der Openstreetmap
Openstreetmap ist weit mehr als eine digitale Landkarte. Openstreetmap ist auch eine Datenbank mit viel strukturiertem Wissen über Orte, das jeder leicht abrufen und verarbeiten kann. So kann man zum Beispiel aus der Openstreetmap leicht Informationen ziehen und auf vielfältige Weise nutzen. Als Tabelle, als Karte, als Datensatz für eine eigene Visualisierung. Wie man diesen Datenschatz hebt und nutzt zeige ich an einem speziellen Beispiel, das man so aus Google Maps nicht abfragen kann: Zeige mir alle Kirchen einer bestimmten Konfession in einer Stadt samt der Gottesdienstzeiten (hier das Ergebnis der im Folgenden beschriebenen Arbeit). Mit den Werkzeugen kann auch ganz ähnliche Weise andere spezielle Abfragen nutzen.
1. Verschlagwortung kennenlernen
Bevor man sich an Abfragen versucht, sollte man sich möglichst breit darüber informieren, wie Menschen jene Dinge in der Openstreetmap verschlagwortet und kartiert haben, die man sucht. Ein paar bekannte Beispiele untersuchen, die Werte und Schlüssel notieren. Das geht einfach mit einer Suche auf Openstreetmap.org – auf der Karte kann man Objekte suchen (das Symbol mit Mauscursor und ? daneben) und die Attribute einzelner Objekt ansehen. Die Keys (z.B. denomination= / amenity= / service_times=) und values (der Wert hinter dem Fragezeichen) sollte man mit dem Werkzeug Taginfo suchen und im OSM-Wiki nachschlagen, um etwas mehr über die Praxis des Verschlagwortens und Kartierens zu lernen. So engt man sich nicht zur früh zu sehr ein, wie man wonach suchen kann.
Ich habe dabei zum Beispiel erfahren, dass bei katholischen Kirchen der Key Denomination sehr unterschiedlich genutzt wird. Statt als denomination=roman_catholic wie empfohlen gibt es für römisch-katholische Kirchen oft noch den Wert denomination=catholic – so was muss man wissen, bevor man Abfragen baut (mehr im Wiki).
2. Ort und Daten auswählen
Der Onlinedienst Overpass-Turbo ist das Universalwerkzeug zum Abfragen und Aufbereiten von Daten aus der Openstreetmap. Einen guten Überblick der Abfragesprache mit vielen Beispiele gibt das OSM-Wiki.
Die Abfrage ist mit Overpass in der Regel ganz leicht auf das Gebiet einer bestimmten Stadt einzugrenzen. Zum Testen einfach den Namen eurer Stadt, eures Regierungsbezirks oder des Bundeslandes bei Nominatim abfragen. Wenn der erste Treffer das gesuchte Gebiet zeigt, ist alles in Ordnung. Falls nicht, sind oft falsch gesetzte Wikipedia-Tags die Ursache (hier mehr zu so einem Fall und der Lösung). Überhaupt: Das Q&A-Forum der OSM ist extrem hilfreich bei einem konkreten Problem.
Für einen Überblick der Daten auf einer Karten habe ich für mein Beispiel letzten Endes diese Abfrage genutzt:
[out:json][timeout:25]; // fetch area “essen” to search in {{geocodeArea:essen}}->.searchArea; // gather results ( // query part for: “"andachtsstätte"” way["amenity"="place_of_worship"]["denomination"="roman_catholic"]["building"~"church|cathedral"](area.searchArea); ); // print results out body; >; out skel qt;
Das funktioniert in dem Fall nur, weil ich zuvor die Werte für „denomination“ vereinheitlich habe. Sonst hätte man auch hier eine oder-Abfrage mit catholic und roman_catholic wie bei building (~ statt = und die Oder-Werte mit | getrennt) formulieren müssen.
Außerdem: In der Regel sind Points of Interest in der OSM entweder als Punkt oder als Linie hinterlegt. Daher muss man in der Regel eine Anfrage formulieren, die alle Formen abfragt. Also wie oben, aber auch:
node["amenity"="place_of_worship"]["denomination"="roman_catholic"]["building"~"church|cathedral"](area.searchArea); way["amenity"="place_of_worship"]["denomination"="roman_catholic"]["building"~"church|cathedral"](area.searchArea); relation["amenity"="place_of_worship"]["denomination"="roman_catholic"]["building"~"church|cathedral"](area.searchArea);
3. Datenqualität mit einer Tabelle der Merkmale prüfen
Wenn bestimmte Informationen (zum Beispiel Öffnungszeiten) visualisieren will, braucht man zuvor den Überblick, was noch alles in der OSM fehlt. Da ist eine Tabelle hilfreich. Auch die lässt sich leicht mit Overpass erstellen. Statt einer Karte gibt man einfach CSV-Daten aus, die sich dann auch leicht mit einer Tabellenkalkulation veranschaulichen lassen.
Für mein Beispiel sieht die entsprechende Abfrage so aus.
[out:csv("name", "addr:street", "addr:housenumber", "addr:postcode", "addr:city", ::id, ::type, "service_times", "contact:website"; true; "|")][timeout:25];
// fetch area “essen” to search in
{{geocodeArea:essen}}->.searchArea;
// gather results
(
// query part for: “"andachtsstätte"”
way["amenity"="place_of_worship"]["denomination"="roman_catholic"]["building"~"church|cathedral"](area.searchArea);
);
// print results
out body;
>;
out skel qt;
Unter out ist beschrieben, welche Keys aus der OSM-Datenbank aufbereitet werden. Als Tabelle gedacht: Jeder Key ist eine Spalte, jede Zeile ist ein Datensatz auf dem ausgewählten Gebiet, für den alle Ausprägungen bei den Keys in der Spalte eingetragen werden. Also zum Beispiel der Name, die Straße, die OSM-ID (wichtig, wenn man einzelne Datensätze schnell in der OSM bearbeiten will).
4. Datenfeed aus Overpass-Abfrage erstellen
Wenn die Daten vollständig (und ggf. in der OSM ergänzt!) sind, kann man einen immer aktuellen Datenfeed einrichten. Dazu einfach die erste Overpass-Abfrage (Karte, nicht CSV) aufrufen. Export auswählen und als Format „Rohdaten direkt von Overpass-API“. Dann erhält man eine URL, die sich anderswo zum Import das Datenstroms nutzen lässt.
5. Datenfeed mit uMap visualisieren
Ein sehr hilfreiches und vielseitiger Werkzeug zur Darstellung von OSM-Daten ist uMap. Man richtet eine neue Karte ein, fügt eine Ebene hinzu und wählt hier den Datenfeed als Quelle aus. Das geht so: Ebeneneigenschaften > Ausgelagerte Daten und hier bei URL die in Schritt 4. erzeigte URL einfügen. Die grafische Aufbereitung lässt sich stark individualisieren. Man kann Datenpunkte einblenden, Zoom-Effekte nutzen, durch dickere Umrandungen die einzelnen Punkte auf der Karte stärker hervorheben (und für die Nutzung im Smartphone-Browser leichter tippbarer).