Schlagwort-Archiv: Overpass API

Aufnahme eines Betonbaus als Zugang zu einer Tiefgarage, darueber ein Sparkassen-Lichtreklamen-Logo

Wo sind Sparkassen nahe an Tiefgaragen – Schoener leben mit Linked Open Data

Wenn man (aus welchen Gruenden auch immer) wissen wollte, wo in der Gegend Sparkassen nahe an Tiefgaragen liegen, dann liegt es natuerlich sehr nahe, auszurufen „aha, das ist ein Fall fuer Open Data!“ und damit auch gleich ziemlich richtig zu liegen.

Titelfoto: Peter Nath, 2014 09 21 OG Sparkassenareal und noerdl Innenstadt 34, CC BY 4.0

Mit der Overpass-API lassen sich naemlich nicht nur Features – wie zum Beispiel Hydranten – aus OpenStreetMap abfragen, man kann auch komplexere Abfragen nach Dingen in einem bestimmten Abstand zu anderen Dingen dort machen. Die Beispielliste fuehrt lustigerweise ein Query nach Banken auf, die weit weg von Polizeistationen liegen. Das laesst sich fuer unseren Zweck natuerlich leicht anpassen.

So sah meine schnell zusammengeschusterte Abfrage nach Banken aus, die maximal 30 Meter um eine gemappte Tiefgarage liegen:

[out:json][bbox:{{bbox}}][timeout:25];
// gather results
//nwr["amenity"="bank"]["name"="Sparkasse"]->.sparkassen;
nwr["amenity"="bank"]->.banken;
nwr["parking"="underground"]->.tiefgaragen;

nwr.banken(around.tiefgaragen:30);
// print results
out geom meta;

He warte, wir wollten Sparkassen!

Aber Moment mal: Das filtert doch nach allen in OpenStreetMap verzeichneten Banken, nicht nur nach Sparkassen! Ja, richtig – in der Zeile obendrueber ist ein Filter, der nur die Banken beruecksichtigt, die „Sparkasse“ heissen. Aber der beruecksichtigt eben nur Banken, die exakt Sparkasse in genau dieser Schreibweise heissen.

Manche Sparkassenfilialen sind in OpenStreetMap auch einfach nur als Sparkasse getaggt, andere heissen so wie die jeweilige Kreis- oder Stadt- oder sonstige Sparkasse. Ob name = Sparkasse Neu-Ulm - Illertissen (Brückenhaus) schon zu ausfuehrlich ist, mag ich nicht beurteilen. Wenn man alle Banken sucht, in deren name Sparkasse vorkommt, koennte man die Abfrage mit einem Regulaeren Ausdruck bauen, beispielsweise mit einer Suche nach nwr["amenity"="bank"][name~".*(S|s)parkasse.*"]. Das Problem dabei: Solch eine Anfrage an die Overpass-API laeuft schnell in einen Timeout, sobald der abzufragende Kartenausschnitt etwas groesser ist.

Der Unterschied zwischen Namen, Betreiber und Marke

Beim Blick auf den Screenshot oben mit der Filiale am Brueckenhaus faellt aber der Key operator= auf, in dem hier explizit die Sparkasse Neu-Ulm – Illertissen (mit exakt diesem etwas seltsam aussehenden Namen) als Betreiberin eingetragen war. Und wenn man das Tagging-Schema fuer Banken genauer betrachtet, wird dort der Key brand= vorgeschlagen, mit dem die „Marke“ einer Einrichtung angegeben werden kann.

Das vereinfacht die Suche nach bestimmten Banken, ohne irgendwelche Wildcard-Suchen auf den Namen machen zu muessen – wenn die Bank denn ausfuehrlich getaggt worden ist:

  • name bezeichnet den Eigennamen genau dieser Bankfiliale. Vielleicht reicht hier eh nur „Sparkasse“, andere schreiben sonst noch was dazu, so ist das eben in OSM.
  • operator ist die Betreiberin – hier eben die jeweilige oeffentlich-rechtliche Sparkasse mit ihrem Kreis- oder Stadt- oder sonstigen Namen
  • brand ist die (Dach)Marke der Bank – und das ist hier tatsaechlich immer „Sparkasse“

Ist „Aldi Sued“ dasselbe wie „ALDI SÜD“?

Alles erledigt, jetzt koennen wir filtern, wuerde man meinen – oder? Die deutschsprachige Beschreibung von brand weist aber darauf hin, dass der Markenname gemaess der jeweiligen Namenskonventionen eingetragen werden soll. Als Beispiel: Aldi-Supermaerkte werden im Name-Tag als „Aldi“ oder „Aldi Nord“ oder „Aldi Sued“ getaggt. Die Schreibweise der Marke sei jedoch „ALDI Nord“ oder „ALDI SÜD“. Das muss man natuerlich dann erst einmal wissen, sowohl beim Tagging als auch bei der Abfrage.

Mit Linked Open Data ist aber auch dieser Fallstrick ueberhaupt kein Problem mehr, und sowohl die Wiki-Beschreibungen von brand als auch von operator verweisen jeweils auf die optionalen Keys operator:wikidata und brand:wikidata, mit denen beiden die eindeutige Wikidata-ID zugewiesen werden kann. Fuer eine Sparkassenfiliale kommt also neben brand=Sparkasse einfach brand:wikidata=Q13601825 dazu. Und schon lassen sich tatsaechlich nur Sparkassen anzeigen, die nahe an Tiefgaragen liegen – sofern denn brand und wikidata-ID der Marke getaggt wurden:

[out:json][bbox:{{bbox}}][timeout:25];
// gather results
nwr["amenity"="bank"]->.banken;
(
  nwr.banken["brand"="Sparkasse"];
  nwr.banken["brand:wikidata"="Q13601825"];
)->.sparkassen;
nwr["parking"="underground"]->.tiefgaragen;

nwr.sparkassen(around.tiefgaragen:30);
// print results
out geom meta;

(Randbemerkung, weil ich die letzten Stunden Wikidata-IDs und operators und brands auf OpenStreetMap nachgetragen habe: Fuer Sparkassen ist das schoen aufdroeselbar. Bei Genossenschaftsbanken, die mal als „Volksbank“, mal als „Raiffeisenbank“ firmieren und fuer die es keine Wikidata-ID fuer die jeweilige „Marke“ zu geben scheint, wird das schon wieder komplexer. Ein neues Rabbit Hole!)