Check The Places – Abgleich von POIs mit All The Places

Hallo zusammen,

ich möchte Euch ein neues Projekt vorstellen, bitte um Euer Feedback und würde mich natürlich über Mitmacher freuen.

Check The Places gleicht Informationen über Ketten wie z.B. Geschäfte, Fast Food oder Tankstellen zwischen All The Places und OSM ab. Es ist ein QA-Werkzeug für Mapper. Es finden kein Import oder automatische Änderungen statt. Es erstellt Berichte mit Prüflisten für Mapper, die Einzelfälle selbst bewerten.

https://check-the-places.gitlab.io/

Viele Ketten haben auf ihren Websites eine Liste aller Filialen mit Geokoordinaten, Adressen, Öffnungszeiten und Kontaktinformationen. All The Places ist eine Open-Source-Sammlung von Web-Scrapern, um diese Daten von den Unternehmens-Websites einzusammeln.

So funktioniert es

Der Abgleich zwischen All The Places und OpenStreetMap findet nach Marke und Land getrennt statt. Im All-The-Places-Projekt laufen die Scraper wöchentlich und veröffentlichen ihre Ergebnisse. Die Daten des neuesten Durchlaufs werden für jede Marke heruntergeladen.

OpenStreetMap wird mittels Overpass API abgefragt. Für die Supermarktkette „Netto“ als Beispiel wäre die Abfrage für den erwarteten Haupttyp shop=supermarket und der name müsste Netto Marken-Discount oder Netto City sein, oder für brand:wikidata=Q879858.

Die Arbeitshypothese ist: Betreiber-Websites können ein guter Hinweis auf Eröffnungen und Schließungen sein. OSM hat typischerweise eine gewisse Verzögerung bei der Eröffnung oder Schließung von Filialen. Andererseits sind die Geokoordinaten in OpenStreetMap sehr präzise, während sie das auf den Webseiten nicht sind. Viele Webseiten verwenden geokodierte Adressen, die ziemlich ungenau sein können.

Das Ziel ist es, eine eins-zu-eins Zuordnung zwischen den Datensätzen herzustellen. Zunächst wird die website benutzt. Das funktioniert gut, wenn jede Filiale ihre eigene URL hat. Danach werden die Filialen anhand der räumlichen Nähe zugeordnet. Die Adressen werden bisher nicht verwendet. Die OpenStreetMap-Daten werden auch auf Duplikate überprüft. Die können sich ergeben, wenn z.B. ein Geschäft auf dem Gebäudeumriss getaggt ist, aber zusätzlich noch einmal als Punkt innerhalb des Gebäudes.

Als Ergebnis dieses Prozesses erhalten wir vier Mengen von Punkten:

  1. Übereinstimmende Punkte. Wir können in den Daten von All The Places schauen, ob zusätzliche Infos wie die Website oder Öffnungszeiten in OpenStreetMap übernommen werden könnten.
  2. Objekte ohne Übereinstimmung in OpenStreetMap. Dies könnten neue Filialen sein, die noch nicht erfasst sind, oder auch welche, die mit falschem Namen oder fehlenden Brand-Attributen eingetragen sind, usw. Ein Mapper sollte sich das ansehen und die Filiale in OpenStreetMap hinzufügen, falls sie wirklich fehlt.
  3. Objekte ohne Übereinstimmung in All The Places. Das könnten Filialen sein, die dauerhaft geschlossen wurden. Ein Mapper sollte sich das ansehen, die Versionsgeschichte des Objekts prüfen und versuchen dritte Quellen wie Zeitungsberichte zu finden. Nach eigener Prüfung könnte dann ein Licecycle-Tag, eine Änderung oder in klaren Fällen das Entfernen passend sein.
  4. Mögliche Duplikate in OpenStreetMap. Wenn es wirklich zwei OSM-Objekte für dieselbe Sache sind, dann sollten sie zu einem zusammengeführt werden. Manchmal liegen zwei verschiedene Geschäfte nah beieinander. In diesem Fall sollten sie einfach so bleiben, wie sie sind.

Es werden keine Änderungen direkt in OpenStreetMap gemacht. Das Ergebnis des Prozesses ist ein Bericht je Marke, in dem die obigen Befunde aufgelistet werden. Ein Mapper kann sie als Hinweise verstehen, welche Orte genauer untersucht werden sollten und dann selbst entscheiden, ob und wie die Daten verbessert werden können. Bei den OSM-Einträgen wird auch das letzte Änderungsdatum angezeigt.

Als geschlossen markierte Objekte, disused:*, was:*, abandoned:* oder shop=vacant, werden (bisher) nicht berücksichtigt.

Mitmachen!

Was Ihr tun könnt:

Nehmt Euch eine Kette vor und prüft ein paar der gemeldeten Unterschiede. Am sinnvollsten ist ein Einstieg mit einer kleinen, gut matchbaren Kette oder mit Orten, die ihr lokal kennt. Bitte keine großen systematischen Änderungen nur anhand der Berichte.

Gebt Feedback, wie die Auswertung verbessert werden könnte. Ihr könnt hier im Forum antworten oder gern auch direkt Issues erstellen.

Sagt Bescheid, welche Marken oder Kategorien Ihr gern ausgewertet haben möchtet. Ketten für die es schon Scraper gibt können mit sehr wenig Aufwand hinzugefügt werden. Falls es noch keinen Scraper gibt, erstellt bitte ein Issue im All The Places Projekt.

Eine Erweiterung auf andere Länder oder Sprachen ist möglich technisch schon vorbereitet. Das würde ich aber nur dann erwägen, wenn es entsprechende Nachfrage und eine Community in dem Land gibt, die mitarbeiten will.

Bitte behandelt die Berichte nicht als Importvorlage. Wer daraus Änderungen ableitet, sollte jeden Einzelfall selbst prüfen und die üblichen OSM-Regeln zu Imports, Mechanical Edits und Quellen beachten.

All The Places als Datenquelle

All The Places als Datenquelle wurde schon ausführlich in

diskutiert. Für Check The Places werden nur Scraper berücksichtigt, die direkt auf Betreiberquellen beruhen. Scraper, die auf Dienste von Dritten zugreifen, werden deshalb nicht benutzt. Aldi beispielsweise verwendet „Uberall“ und wird deshalb nicht ausgewertet.

Die Datenqualität kann je nach Betreiber der Website sehr unterschiedlich sein. Oft sind die Koordinaten ungenau, manchmal um mehrere 100 Meter. Teilweise gibt es keine filialspezifischen Websites, was das Matching schwieriger macht. Häufig sind im Code noch Nachbearbeitungen der Daten nötig. Das alles sind Gründe, warum ich die Ketten nur eine nach der anderen hinzufüge, nachdem ich den Scraper-Code und die Datenqualität angesehen habe.

Beispiele

Ein Beispiel für gut nutzbare Daten ist Penny.

  • Die Koordinaten sind genau
  • Jede Filiale hat eine Website mit eigener URL
  • Der Name enthält immer „Penny“

EDEKA hingegen macht Probleme:

  • Mehrere Untermarken: Edeka, E-Center, nah & gut, Frischemarkt, Simmel, …
  • Koordinaten ungenau, teilweise kilometerweit daneben
  • Nicht alle Einträge in den ATP-Daten haben eine Website

Bei Hagebaumarkt und BauSpezi schlägt der Ansatz vielleicht ganz fehl, wenn viele Filialen nicht einmal den Markennamen tragen.

Diese Unterschiede sind auch der Grund, warum die Ergebnisse je Marke getrennt sind und warum nicht alle ATP-Scraper automatisch übernommen werden.

Ähnliche Projekte

Es gab schon mehrere Ansätze zur Verwendung der ATP-Daten.

  • ATP-OSM experimental matcher – Dieses Projekt versucht, alle Daten aus ATP mit OSM abzugleichen. Die Ergebnisse werden pro Gitterquadrant dargestellt, wohingegen Check The Places die Ergebnisse für eine ganze Kette in einem Land auflistet.
  • Chain Reaction – Abgleich von OSM POIs mit Listen wie ATP, Geolytix’ Retail Points und anderen. Nur in UK.
  • atp2osm – Import von Öffnungszeiten und Kontaktdaten aus ATP für in OSM bereits existierende POIs. Nur in Frankreich.
  • qa-atp-osm – Skripte, um Unterschiede zwischen OSM und ATP aufzulisten.
  • All The Places US Import – einmaliger Import von ATP-Daten auf existierende OSM-Objekte nur in den USA.

So ein ganz allgemeines Feedback dazu: Was du von “uns” mappern willst erfordert doch eher lokales Wissen. Hingehen, schauen, Daten verbessern. Da ist die aktuelle Aufteilung nach Marke recht umständlich und eine Aufteilung nach Räumlichkeit sinnvoller.

Hmm. Warum diese Einschränkung?

Es geht doch um die manuelle Prüfung der Daten und nicht deren (automatisierte) Übernahme:

  • Fehlt der Eintrag ganz?
  • Fehlen Detaildaten oder sind sie inkorrekt?

Möglicherweise liegt es auch daran, dass einfach nur die Schreibweisen/Namen nicht passen?
Habe gerade einen “Fehler” versucht zu korrigieren: Vor Ort (und auf den Prospekten) steht “E center” und nicht “E-Center”. War (deshalb?) als “fehlend” gekennzeichnet, aber seit 15 Jahren erfasst. Der “No mach”-Punkt lag sehr genau innerhalb des Gebäudes mit dem Edeka…

(Korrektur: Beim Namen bin ich mir nicht mehr sicher…)

Ok, was wäre hier zu tun:

ATP-Koordinaten jenseits von Gut und Böse.
OSM ist korrekt, da habe ich schon eingekauft …
contact:website unterscheidet sich, die in OSM ist die URL-Encoding-Variante von ATP …

Hi im Rapid Webeditor gibt es auch die Möglichkeit Overture Places hinzuzuladen zum Vergleich ( Rapid | Overture Documentation ). Die Idee klingt für mich vergleichbar, ist der Vorteil von ATP, dass die Daten da direkter aktualisiert werden?

Wer lieber lokal arbeiten möchte, kann sich ja einmal ATP-OSM experimental matcher, graticule map anschauen. Persönlich fand ich die Auswertung nicht so hilfreich und das war für mich der Anstoß Check The Places zu entwickeln.

Siehe die Diskussion im Diskussionsfaden “Improving OpenStreetMap shop coverage with AllThePlaces”, den ich oben verlinkt habe. Fakten über Geschäfte von deren eigenen Websiten zu entnehmen, dürfte rechtlich für OSM unproblematisch sein. Wenn die Daten aber von Dritten kommen, könnte z.B. das sui generis Datenbankrecht in der EU greifen.

Ich denke es verhält sich ähnlich wie die Übernahme von Fakten aus anderen Karten oder Verzeichnisdiensten. Selbst wenn sie rechtlich ok sein sollte, möchte OSM „weißer als weiß“ bleiben, um gar keine Zweifel oder Angreifbarkeit aufkommen zu lassen.

Mmh, es gibt tatsächlich ein paar aktive Supermärkte, die name=E center haben. Aber bei diesen ist auch brand:wikidata=Q701755 (= EDEKA) gesetzt und darüber müssten sie eigentlich gefunden werden.

Handelt es sich vielleicht um diesen Spezialfall? Way: ‪E center‬ (‪24698062‬) | OpenStreetMap Dort sind alle Geschäfte auf disused: gesetzt.

Das ist ein guter Hinweis. Man muss die URLs normalisieren, so dass sie die gleiche Formatierung benutzen und alles URL-encodiert ist. Ich habe das hinzugefügt, so dass es hoffentlich im nächsten Durchlauf behoben wird.

Falls das nicht richtig rübergekommen sein sollte: Die Koordinaten stammen so von Edeka.
ATP reicht die nur durch. Es scheint wohl niemand auf diese Karte angewiesen zu sein, um den Laden zu finden.

Overture Places ist ein Mischung aus mehreren, verschiedenen Datenquellen. Siehe Overview | Overture Documentation. Der größte Anteil kommt von Facebook/Meta.

Die Auswertung hier hat meiner Meinung nach den Vorteil, dass sie die Daten direkt von den Ketten nutzt. Außerdem wird konkret gezeigt, welche Objekte jeweils nicht zugeordnet werden konnten. Bei Rapid kann man ja nur visuell auf der Karte vergleichen. Rapid+Overture hilft bei der Frage, was in einer Gegend generell noch an POIs fehlen könnte.

Nö.

Mein Fall war Way: ‪E-Center‬ (‪31002331‬) | OpenStreetMap
Den habe ich jetzt als POI ausgelagert ( Node: ‪E center‬ (‪14030819961‬) | OpenStreetMap ), weil das zwar früher einmal alles ein Laden war (noch früher unter einem anderen Namen “Dima”), aber jetzt unter anderem auch ein Kik im Gebäude drin ist.

Doch sicher, deswegen habe ich ja zitiert:

Was kann ich in solchen Fällen tun?

Beispiel: ref=19175

Seit 2024 geschlossen, seit 2025 ein friedas24: Node: ‪Friedas24‬ (‪2603602706‬) | OpenStreetMap

KiK, ref=6580; OSM: node/4301389700
OSM und ATP haben die gleiche Adresse zu diesem KiK, die Läden befinden sich jedoch in zwei unterschiedlichen Gebäuden. Nach nicht aktuellen Mapillary-Aufnahmen stimmt das Gebäude in OSM.

Kann ich eine solche Information in Check the places hinterlegen, so dass

  • andere sehen, dass es überprüft wurde und das Prüfergebnis
  • ich selbst mir nicht alles merken muss, was ich geprüft habe

Die Google-Gemini-KI-Modelle verfügen seit einiger Zeit über geospatiales Verständnis. Google nennt das “Grounding with Google Maps”. Damit sind zum Beispiel solche Abfragen möglich:

“Erstelle eine Liste mit allen Restaurants im Umkreis von 500 Metern um den Dom in Münster (NRW).”

Response

Im Umkreis von ca. 500 Metern um den St.-Paulus-Dom in der Münsteraner Altstadt befinden sich zahlreiche erstklassige und traditionsreiche Restaurants.

Eine Übersicht empfehlenswerter Restaurants in direkter Gehdistanz zum Dom:


1. Direkt am Domplatz

  • MarktCafé (Domplatz 6–7)
    Klassisches Café & Bistro mit Terrasse am Domplatz, bekannt für Frühstück, Flammkuchen und warme Gerichte.
  • LUX | Barkultur • Grillkunst • Restaurant (Domplatz 10, im LWL-Museum)
    Moderne Bar & Grillrestaurant mit gehobener Küche, Steaks, Currys und Cocktails.
  • OLEA - Nazareth oriental Streetfood (Geisbergweg 8)
    Orientalisches Streetfood und Spezialitäten gleich hinter dem Domplatz.

2. Prinzipalmarkt & Rathaus (ca. 150–250 Meter)

  • Gasthaus Stuhlmacher (Prinzipalmarkt 6/7)
    Traditionsreiches westfälisches Gasthaus mit regionalen Klassikern wie Schnitzel, Pfefferpotthast und Zapfbier.
  • Ratskeller Münster (Prinzipalmarkt 8)
    Restaurant direkt im historischen Rathaus mit deutscher und internationaler Küche.

3. Kiepenkerlviertel, Spiekerhof & Bogenstraße (ca. 200–300 Meter)

  • Großer Kiepenkerl Gasthaus (Spiekerhof 45)
    Bekanntes Altstadt-Restaurant für typisch westfälische Küche und saisonale Spezialitäten.
  • Kleiner Kiepenkerl (Spiekerhof 47)
    Urig-gemütliches Gasthaus mit traditioneller deutscher Küche direkt gegenüber dem Kiepenkerl-Denkmal.
  • MACELLUM (Bogenstraße 15)
    Gehobenes Steakhouse und Bar/Grill in stilvollem Ambiente.
  • Cœur D’Artichaut (Alter Fischmarkt 11a)
    Sterne-Gastronomie mit französischer Fusionsküche und exklusiven Menüs.
  • Köpi Stuben (Bergstraße 73)
    Deftige Küche, Gaststätte und Biergarten.

4. Rothenburg & Aegidiistraße (ca. 200–300 Meter)

  • Mocca d’or (Rothenburg 14)
    Sehr beliebtes italienisches Restaurant für Steinofenpizza und frische Pasta.
  • Gaststätte Töddenhoek (Rothenburg 41)
    Nostalgische, urige Gaststätte mit westfälischen Hausmannskost-Gerichten.
  • Alem Mar (Aegidiistraße 1)
    Portugiesisches Restaurant mit Fisch- und Fleischgerichten sowie passenden Weinen.

5. Heinrich-Brüning-Straße & Stubengasse (ca. 250–350 Meter)

  • 1648 CAFÉ | LOUNGE | GASTRONOMIE (Heinrich-Brüning-Straße 5)
    Inklusionsbetrieb auf den obersten Etagen des Stadthauses 1 mit Panoramablick über ganz Münster.
  • Klemens / Stadt Café (Klemensstraße 9/10)
    Bistro & Café mit Frühstück, Flammkuchen und Rösti-Spezialitäten.
  • bona’me Münster (Stubengasse 11)
    Moderne orientalische/kurdisch-türkische Küche in Selbstbedienungs-Atmosphäre.

6. Nördliche & Südliche Altstadt-Ränder (ca. 300–450 Meter)

  • La Costanera (Bergstraße 19–20)
    Peruanische Spezialitäten, kreative Tapas und Cocktails.
  • Altes Gasthaus Drübbelken (Buddenstraße 14–15)
    Eines der ältesten und urigsten Gasthäuser Münsters mit westfälischer Küche.
  • Kami Kitchen Münster (Königsstraße 45)
    Moderne asiatische Küche und Sushi.

Sources

  1. MarktCafé

  2. LUX | Barkultur • Grillkunst • Restaurant

  3. OLEA- Nazareth oriental Streetfood

  4. Gasthaus Stuhlmacher

  5. Gasthaus Stuhlmacher

  6. Ratskeller Münster

  7. Ratskeller Münster

  8. Großer Kiepenkerl Gasthaus

  9. Großer Kiepenkerl Gasthaus

  10. Kleiner Kiepenkerl

  11. Kleiner Kiepenkerl

  12. MACELLUM / Münster

  13. Cœur D’Artichaut

  14. Köpi Stuben | Gaststätte • Restaurant • Biergarten

  15. Mocca d’or

  16. Gaststätte Töddenhoek

  17. Alem Mar

  18. 1648 CAFÉ | LOUNGE | GASTRONOMIE

  19. Stadt Café

  20. Klemens / Münster

  21. bona’me Münster

  22. bona’me Münster

  23. La Costanera

  24. La Costanera

  25. Altes Gasthaus Drübbelken

  26. Kami Kitchen Münster

Das klappt natürlich auch mit vielen anderen Objekten (ALDI, Rewe, …).

PS: Man sollte die ermittelten Informationen ausschließlich als Basis für eigene Überprüfungen verwenden, also nichts davon direkt nach OSM übernehmen.

Tja, EDEKA ist frustrierend kompliziert. Wenn sich die Daten als zu fehlerhaft herausstellen, dann bin ich geneigt, EDEKA ganz aus der Auswertung zu nehmen oder zumindest eine dicke Warnung draufzuschreiben.

Hier ist das Problem, dass KiK keine filialspezifischen Websiten (mehr) hat.

Ich könnte den Radius für KiK erhöhen, so dass es mehr Toleranz hat. Hatte ich z.B. bei Kaufland auch gemacht. Allerdings sind Kauflands immer weit voneinander entfernt. Bei KiK sieht es anders aus und die stehen teilweise sehr dicht. Es könnte also sein, dass man dadurch wieder falsch positive Treffer erhält. Ich werde das mal ausprobieren.

Ich hatte auch schon überlegt, zusätzliches Matching anhand von branch oder ref hinzuzufügen. branch ist leider in den ATP-Daten für KiK nicht enthalten.

Bei ref würde es nicht ausreichen direkt ref = ‹Filialnummer› zu erwarten. Es gibt viele Rossmann mit ref:shop:num. Vereinzelt gibt es auch ref:Hermes, ref:rewe usw.

Ich favorisiere ein wenig, die Probleme über Matching-Regeln und Tagging zu lösen als durch Listen von Ausnahmen, weil ich die Hoffnung habe, dass das auch anderen Datennutzern hilft, die vielleicht ATP und OSM zusammenbringen wollen.

Tja. Ich habe schon erwartet, dass die Frage kommt.

Bisher hatte ich vorgesehen, dass die Ausgabe nur statische HTML-Dateien sind. Das hat den Vorteil, dass man sie kostenlos auf GitLab, GitHub usw hosten kann. Ich bin noch nicht motiviert genug, eine Server-Komponente hinzuzufügen, bei der man sich dann um Authentifizierung, Moderation usw. kümmern müsste.

Dass man Einträge für sich selbst im Browser ausblenden kann, dürfte relativ leicht hinzuzufügen sein.

Ich schaue mal, ob ich eine einfache Möglichkeit finde, solche Kommentare auch mit anderen zu teilen.