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.
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;
}
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.
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.
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.
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.
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
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.