You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
Pages: 1
#1 2013-09-09 09:52:26
- 2cent
- Member
- Registered: 2013-09-04
- Posts: 6
Overpass API OR-Operator
Hallo zusammen,
ich würde in der Overpass-API gerne eine Abfrage mit OR-Operator machen, also etwa
[amenity=bus_station||highway=bus_stop||public_transport=*]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=...]" ...).
Vielen Dank schonmal
Johannes
Last edited by 2cent (2013-09-09 10:21:28)
Offline
#2 2013-09-09 10:43:17
- couchmapper
- Member
- Registered: 2013-02-17
- Posts: 462
Re: Overpass API OR-Operator
Hallo!
ein "oder" gibt es so nicht, allerdings lässt sich das gleiche Ergebnis über ein union-Konstrukt erreichen: http://wiki.openstreetmap.org/wiki/Over … s_QL#union
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.
Doku: http://wiki.openstreetmap.org/wiki/Over … rbo/Wizard
Last edited by couchmapper (2014-01-19 19:36:22)
Offline
#3 2013-09-09 14:00:52
- EvanE
- Member
- Registered: 2009-11-30
- Posts: 5,716
Re: Overpass API OR-Operator
ein "oder" gibt es so nicht, allerdings lässt sich das gleiche Ergebnis über ein union-Konstrukt erreichen: http://wiki.openstreetmap.org/wiki/Over … s_QL#union
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?
Edbert (EvanE)
Offline
#4 2013-09-09 14:21:52
- toc-rox
- Member

- From: Münster
- Registered: 2011-07-20
- Posts: 2,357
- Website
Re: Overpass API OR-Operator
... 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.
Gruß Klaus
Offline
#5 2013-09-09 14:41:54
- Oli-Wan
- Member

- From: NRW
- Registered: 2010-09-14
- Posts: 2,814
Re: Overpass API OR-Operator
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.
No animals were harmed in the writing of this posting.
Offline
#6 2013-09-09 16:17:09
- viw
- Member
- Registered: 2010-05-15
- Posts: 2,623
Re: Overpass API OR-Operator
toc-rox wrote: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.
Dieser Ansatz ist zum scheitern verurteilte, wenn die Adressen nicht am Umriss erfasst sidn.
Offline
#7 2013-09-09 16:31:13
- stephan75
- Member
- Registered: 2008-05-28
- Posts: 2,918
Re: Overpass API OR-Operator
Wenn man OSM-Objekte zählen möchte, kommt man vielleicht mit http://wiki.openstreetmap.org/wiki/Osmconvert weiter.
Da kann man eine OSM-Datei als CSV-Datei ausgeben lassen. Hilft das?
Offline
#8 2013-09-09 16:36:14
- EvanE
- Member
- Registered: 2009-11-30
- Posts: 5,716
Re: Overpass API OR-Operator
Oli-Wan wrote:toc-rox wrote: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.
Dieser Ansatz ist zum scheitern verurteilte, wenn die Adressen nicht am Umriss erfasst sind.
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.
Edbert (EvanE)
Offline
#9 2013-09-09 17:10:07
- toc-rox
- Member

- From: Münster
- Registered: 2011-07-20
- Posts: 2,357
- Website
Re: Overpass API OR-Operator
Ich biete mal dies (mit OR / Union um den Threadbezug wieder herzustellen):
perl opaQuery.pl "(way ['building'] (51.8, 7.4, 52.1, 7.8); rel ['building'] (51.8, 7.4, 52.1, 7.8)); out meta;"
grep -c "\"building\"" opaQuery.Response.xml
29283
grep -c "addr:housenumber" opaQuery.Response.xml
6967
Besser wäre jedoch diese Map-Query:
perl opaQuery.pl "[timeout:720]; (node (51.8, 7.4, 52.1, 7.8); <;); out meta;"
grep -c "\"building\"" opaQuery.Response.xml
29860
grep -c "addr:housenumber" opaQuery.Response.xml
11962
Gruß Klaus
Last edited by toc-rox (2013-09-09 17:22:54)
Offline
#10 2013-09-09 17:16:50
- geodreieck4711
- Member
- Registered: 2011-07-18
- Posts: 119
Re: Overpass API OR-Operator
Hallo!
ein "oder" gibt es so nicht, allerdings lässt sich das gleiche Ergebnis über ein union-Konstrukt erreichen: http://wiki.openstreetmap.org/wiki/Over … s_QL#union
in der turbo overpass vieleicht so:
//[amenity=bus_station||highway=bus_stop||public_transport=*]
(node({{bbox}})["amenity"="bus_station"]);
(._;node({{bbox}})["highway"="bus_stop"]);
(._;node({{bbox}})["public_transport"]);
out meta;
Offline
#11 2013-09-09 19:35:56
- couchmapper
- Member
- Registered: 2013-02-17
- Posts: 462
Re: Overpass API OR-Operator
Hmmm, ich hätte vielleicht eher sowas erwartet:
(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.
Offline
#12 2013-10-10 10:50:20
- hurdygurdyman
- Member

- Registered: 2009-12-10
- Posts: 2,850
Re: Overpass API OR-Operator
Einsteigerfrage ![]()
Ich will mir alle turn:lanes*=* einer Gegend anschauen, um zu sehen, wo welche erfasst sind oder noch nicht.
Das:
{{key=turn:lanes}}
{{key=turn:lanes:forward}}
{{key=turn:lanes:backward}}
<osm-script output="json">
<union>
<query type="node">
<has-kv k="{{key}}" v="{{value}}"/>
<bbox-query {{bbox}}/>
</query>
<query type="way">
<has-kv k="{{key}}" v="{{value}}"/>
<bbox-query {{bbox}}/>
</query>
<query type="relation">
<has-kv k="{{key}}" v="{{value}}"/>
<bbox-query {{bbox}}/>
</query>
</union>
<print mode="body"/>
<recurse type="down"/>
<print mode="skeleton"/>
</osm-script>
zeigt mir nur ein Ergebnis für key=turn:lanes. Wie bekomme ich die Mehrfachabfrage hin?
Gruß Michael (hurdygurdyman)
Ich mappe für Menschen, die Karten verwenden, welche aus OSM-Daten gerendert wurden
http://de.wikipedia.org/wiki/KISS-Prinzip ![]()
Offline
#13 2013-10-10 10:56:49
- rayquaza
- Member

- From: DE-BW
- Registered: 2012-11-18
- Posts: 2,007
Re: Overpass API OR-Operator
Kurzform nur für Ways und mit "1" und "2" als Key, den Rest kriegst du vmtl selbst hin:
<osm-script output="json">
<union>
<query type="way">
<has-kv k="1"/>
<bbox-query {{bbox}}/>
</query>
<query type="way">
<has-kv k="2"/>
<bbox-query {{bbox}}/>
</query>
</union>
<print mode="body"/>
<recurse type="down"/>
<print mode="skeleton"/>
</osm-script>Offline
#14 2013-10-10 11:00:07
- hurdygurdyman
- Member

- Registered: 2009-12-10
- Posts: 2,850
Re: Overpass API OR-Operator
Kurzform nur für Ways und mit "1" und "2" als Key, den Rest kriegst du vmtl selbst hin:
...
Funzt.
Danke. ![]()
Gruß Michael (hurdygurdyman)
Ich mappe für Menschen, die Karten verwenden, welche aus OSM-Daten gerendert wurden
http://de.wikipedia.org/wiki/KISS-Prinzip ![]()
Offline
#15 2013-10-10 11:36:34
- SunCobalt
- Member
- From: Eislingen
- Registered: 2010-01-09
- Posts: 3,810
Re: Overpass API OR-Operator
Einsteigerfrage
Ich will mir alle turn:lanes*=* einer Gegend anschauen, um zu sehen, wo welche erfasst sind oder noch nicht.
wenn Dir ein paar Tage alte Daten reichen
http://roads.osm4people.org/?zoom=9&lat … rs=B0FFTFF
destination:lanes gehen noch nicht. Hatte ein Tippfehler beim filtern ![]()
Thomas
Offline
#16 2013-10-10 11:53:54
- hurdygurdyman
- Member

- Registered: 2009-12-10
- Posts: 2,850
Re: Overpass API OR-Operator
...
wenn Dir ein paar Tage alte Daten reichen
http://roads.osm4people.org/?zoom=9&lat … rs=B0FFTFFdestination:lanes gehen noch nicht. Hatte ein Tippfehler beim filtern
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.
Gruß Michael (hurdygurdyman)
Ich mappe für Menschen, die Karten verwenden, welche aus OSM-Daten gerendert wurden
http://de.wikipedia.org/wiki/KISS-Prinzip ![]()
Offline
#17 2013-10-11 08:41:52
- drolbr
- Member
- Registered: 2013-05-12
- Posts: 59
Re: Overpass API OR-Operator
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?
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.
Offline
#18 2013-10-11 12:23:51
- EvanE
- Member
- Registered: 2009-11-30
- Posts: 5,716
Re: Overpass API OR-Operator
EvanE wrote: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?
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. ...
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.
Edbert (EvanE)
Offline
#19 2013-10-11 18:05:58
- couchmapper
- Member
- Registered: 2013-02-17
- Posts: 462
Re: Overpass API OR-Operator
Hola,
Turbo zeigt das sogar unten rechts auf der Karte an:
geladen – Nodes: 40, Ways: 23013, Relations: 0
angezeigt – POIs: 0, Linien: 0, Polygone: 0
Last edited by couchmapper (2013-10-11 18:06:49)
Offline
Pages: 1