Leider führt diese Abfrage in der URL aber nicht zum gewünschten Ergebnis. Nötig ist die Abfrage, da nicht alle Haltestellen mit “public_transport” getaggt sind, sondern z.T. nur durch andere Tags erkennbar sind.
In der Dokumentation habe ich schon geschaut, aber nur den AND-Operator gefunden (durch einfaches aneinanderreihen “[amenity=…][public_transport=…]” …).
Edit 19.1.2014: **Inzwischen gibt es dafür die Wizard in overpass turbo, dort lassen sich auch “oder”-Ausdrücke angeben, die automatisch in ein “union” übersetzt werden. **
Wo wir gerade beim Thema Overpass-API sind, gibt es die Möglichkeit per Overpass-API zu zählen? Hintergrund ist die Frage, wieviel Gebäude gibt es in einem Bereich und wieviele davon haben Adressen / Hausnummern?
Zumindest dreistufig sollte das klappen: also zunächst die Ergebnisdaten laden und dann lokal darauf z.B. zwei “grep” (nach building bzw. housenumber) anwenden.
grep filtert allerdings zeilenweise, nicht OSM-Objekt-weise, ein einfaches … | grep building | grep housenumber wird also nicht reichen. Schon besser: mit z.B. osmfilter nach buildings filtern, dann im Filtrat die Gebäude und Hausnummern zählen - im einfachsten Fall tatsächlich mit (f)grep -c.
Ansonsten läßt sich ein “schlauer” Zähler (d.h. einer, der sich nicht von XML-Zeilen irreführen läßt, konfigurierbar und nebenbei auch noch deutlich schneller ist) natürlich mit Osmium in wenigen Zeilen C++ implementieren.
Warum? In der XML-Fassung sucht du nach (addr:)housenumber und kümmerst dich nicht darum, ob die Adresse am Gebäude-Weg, an einem Eingangsknoten oder als freistehender Knoten erfasst ist.
Erst wenn man diese Dinge unterscheiden will, muss man mehr Aufwand reinstecken. Ebenso wenn man bestimmte Dinge (z.B. Garagen, Gartenhäuser, …) bei der Gebäude-Zählung nicht berücksichtigen will.
In dem Fall greift man wohl eher zu etwas wie sed, awk, Perl oder Phyton bis hin zu einer GIS-fähigen Datenbank.
(node({{bbox}})[“amenity”=“bus_station”];
node({{bbox}})[“highway”=“bus_stop”];
node({{bbox}})[“public_transport”];
);
out meta;
Den Unterschied zwischen beiden Varianten erkennt man ganz gut, wenn man beide Queries hiermit nach pretty url konvertiert. Das Beispiel oben erzeugt 1 Union bestehend aus 3 Statements, das von geodreieck4711 aus dem vorhergehenden Post 3 Unions, jeweils mit Zusammführen der bisherigen Ergebnismenge mit dem aktuellen Statement. Was besser ist weiß ich auch nicht.
Danke für das Angebot. Den QA kenne ich.
Wollte aber mal mit Over(s)pass aktuell probieren, damit ich sehe, was bei mir (oder da, wo ich mich rumtreibe) erledigt ist. Das Teil bietet ja sehr variable Möglichkeiten, weshalb ich mich da einschaffen will.
Siehe http://overpass-turbo.eu/s/1ew
dann keine Reparatur, rechts auf “Daten” schalten. Ich garantiere, dass im Hauptblock genau eine Id pro Zeile geschrieben wird.
Zeilen 6 bis 46 sind Nodes. Also gibt es 41 Punkte in Bonn, die die Tags “building” und “addr:housenumber” besitzen.
Zeilen 47 bis 23057 sind Ways. Also gibt es 23011 Wege in Bonn, die die Tags “building” und “addr:housenumber” besitzen.
Jetzt können wir noch “building”=“no” rauswerfen: http://overpass-turbo.eu/s/1ex
Dies ändert allerdings die Zahlen nicht.
Hey Danke.
Knoten mit building=* gibt es nur noch relative wenige, seit building=entrance durch entrance=main/yes ersetzt wurde. Eventuell kämen noch ein paar Relationen (MP für Gebäude) dazu, eine Erweiterung, die recht offensichtlich ist.
“out ids;” ist wohl das Stichwort, das die Auflistung zum einfachen Zählen ergibt. Vielen Dank, fürs austüfteln und ausprobieren.