Wie z.B. "chinesische Restaurants weltweit" zählen?

Ich suche aktuell nach einem Weg, Tag-Kombis weltweit zu zählen, also z.B. die Frage zu beantworten “Wieviele nodes, ways und relations gibt es mit der Tag-Kombi amenity=restaurant und cuisine=chinese”? Ich brauche dabei nicht die einzelnen POIs, sondern nur die Summenzahl.

Soweit ich das durchblickt habe, kann ich mit TagInfo nur eine Key-Value-Kombi zählen, aber nicht die UND-Verknüpfung aus zwei oder mehreren.

Eine Overpass-Query wäre zwar möglich, dürfte aber z.B. für o.g. Beispiel ziemlich belastend für die Server sein und zudem extrem lange Antwortzeiten haben.

Danke für eure Tipps und LG!

Hallo,

der schnellste Weg ist, den Planetdump herunterzuladen und mit einem Osmium-basierten C+±Programm oder einem Python-Skript, das Pyosmium verwendet, die entsprechende Kombination zu zählen. Beide Varianten erfordern die Nutzung der Kommandozeile.

C+±Variante
Das Git-Repository von Libosmium klonen, die Abhängigkeiten installieren, “mkdir build && cd build && cmake … && make osmium_count”. Wenn das klappt, hast du das Beispielprogramm “osmium_count” erfolgreich kompiliert. Du kannst es nun anpassen und in der Klasse CountHandler in den Methoden node, way und relation vor der Inkrementierung der Zählervariablen noch prüfen, ob die entsprechende Tag-Kombination vorhanden ist:


if (node.tags().has_tag("amenity", "restaurant") && node.tags().has_tag("cuisine", "chinese")) {
    ++nodes;
}

Python-Variante
Du kannst einfach https://github.com/osmcode/pyosmium/blob/master/examples/pub_names.py nehmen und entsprechend umschreiben. Pyosmium kannst du entweder aus den Paketquellen deiner Linux-Distribution installieren, sofern du Linux nutzt, oder mit Pip.

Es gibt auch noch andere Wege, aber dieser benötigen u.U. mehrere Dutzend Gigabyte RAM. Die beiden oben aufgezeigten Varianten nutzen keinen Zwischenspeicher für die Koordinaten der Nodes, weshalb sie relativ sparsam sind.

Viele Grüße

Michael

Overpass kann auch “out count;”, womit Du nur die Anzahlen kriegst.

Siehe hier: http://overpass-turbo.eu/s/OOq (nicht reparieren klicken, sondern “Daten anzeigen”)

Grad getestet: das funktioniert für einigermaßen große Gebiete (Nordsee bis Hannover, incl. Hamburg und Magdeburg) in ~5 Sekunden.

Bei ca. 40 GByte dauert das Herunterladen für normale DSL Anwender schon Stunden,
und dann nur 1kByte an Info rauszuziehen…

Für **eine **Abfrage würde ich es mit Overpass probieren, bei vielen bleibt dann immer noch das Planet File.

Mit **osmconvert **, **osmfilter **und **osmconvert **xxx --out-statistics geht es ohne Programmieren.
https://wiki.openstreetmap.org/wiki/Osmfilter#Keep_only_specific_Tags
https://wiki.openstreetmap.org/wiki/Osmconvert#Retrieving_Statistical_Data

Deutschland braucht mehr als 25s aber weniger als 125s overpass Zeit.

@fx99, @gormo: Danke!

Das “out count” kannte ich schon, aber selbst damit laufe ich bei weltweiten Abfragen bei Tag-Kombis mit hoher POI-Dichte selbst bei 600s Abfragezeit in Timeouts…

Bei mir geht es um 100+ Abfragen mit steigender Tendenz, die regelmäßig aktualisiert werden sollen. Echtzeit wäre natürlich toll, muss aber nicht sein.

Dann werde ich wohl den Weg mit dem Planetdump gehen (müssen). Hab leider kein DSL sondern nur 4G mit stark schwankender Bandbreite.

Ich kenne zwar die Datenstruktur von TagInfo nicht, könnte dort aber zumindest theoretisch das Potential für derartige Abfragen sehen. Aber es ist wahrscheinlich kein oft gefragter use case.

Interessantes Projekt - ist von dem auch etwas auf Andriod geplant?

Hallo,

Autsch, über 4G würde ich keinen Planet herunterladen wollen. Da ist das Monatsvolumen sofort weg.

Ich würde mir an deiner Stelle einen billigen virtuellen Server im Rechenzentrum mieten und den rechnen lassen. Wenn der Server schwachbrüstig ist, dauert das Einlesen des Planets halt 45 statt 30 Minuten. Eine SSD brauchst du für die von mir beschriebene Lösung nicht. Der hat eine schnelle Anbindung und für die Verbindung dorthin brauchst du nur eine SSH-Sitzung über deinen 4G-Internetzugang. Falls du irgendwo einen Computer mit Internetzugang ohne Volumenbeschränkung und Zugriff per SSH von außen hast, kannst du auch den verwenden (eine Cloud ist auch nur eine Sammlung fremder Computer :)). Oder du bittest jemanden, dir den Planet herunterzuladen und per Post zu schicken (kein Witz).

Zum Aktuellhalten des Planets kannst du pyosmium-up-to-date verwenden.

Für Versuche kannst du ja mit einem kleinen lokalen Extrakt von https://download.geofabrik.de/ arbeiten.

Viele Grüße

Michael

Die Idee dafür z.B. sowas wie Amazon EC2 zu nehmen find ich echt interessant.

Wenn du die Instanz nur einmal am Tag für Download und Prozessierung anschmeißt dürfte das echt günstig sein. Müsste man nur gucken, wieviel Speicher/EVS man dafür braucht und wie teuer das dann ist.

osmium_count ohne die von mir beschriebene Modifikation (aber die fällt im RAM-Verbrauch nicht auf) benötigt 237 MB RAM mit einem aktuellen Planet.

Die konkrete Frage nach chinesischen Restaurants kann Taginfo beantworten:
https://taginfo.openstreetmap.org/tags/amenity=restaurant#combinations
(siehe Seite 2 für cuisine=chinese). Für Taginfo gibts auch eine API, die dieselben Statistiken als JSON serviert.

Einschränkungen:

  • Nur häufig vorkommende Kombinationen werden gelistet (aber für die selteneren könnte man dann evtl. doch wieder zu Overpass greifen).
  • Kombinationen aus 3 oder mehr Tags sind nicht drin. In Sachen Flexibilität schlägt natürlich nichts die direkte Arbeit mit dem Planetdump, da haben andere hier ja schon gute Empfehlungen gegeben.

Ja und nein. Ich hatte mich für das Projekt für eine native iOS-App entschieden und bin jetzt auch recht fit in iOS und Swift. Auf den selben Level komme ich in Android aber nicht so schnell, so dass das für mich keine Option ist. Falls sich aber jemand findet, der als Partner eine Android-Version machen will, bin ich dem gegenüber aber durchaus aufgeschlossen :slight_smile:

Guter Hinweis, Du hast vollkommen recht. Danke!

Danke. Mittelfristig komme ich da hoffentlich eh nicht drum rum. Aktuell ist die Nutzung der App noch ziemlich bescheiden. Aber sobald ich nur ansatzweise an das tägliche Overpass-Limit rankomme, werde ich eh einen eigenen Overpass-Server aufsetzen, der dann wohl auch diese Aufgaben übernehmen kann. Nur solange die App irgendwo in den Untiefen des Apple App Stores (ver)gammelt, lohnt sich der Aufwand noch nicht.

Viele Grüße
Georg