Overpass Differenz

Das folgende Beispiel funktioniert nicht: (alle Haltestellen die kein highway=bus_stop haben)

area[name="Köln"];
(node(area)[public_transport=platform]; - node(area)[highway=bus_stop];);

Ich erhalte 1422 Ergebnisse. Dabei sind auch Knoten mit highway=bus_stop
Die Konten sollten entfernt werden. Also ist dieses Ergebnis falsch.
Woran liegt das ?

Aber wenn ich die einzelnen Abfragen in eigene Resultset schreibe kommt eine viel geringere Ergebnismenge von 99, was wahrscheinlich richtig ist.

area[name="Köln"];
node(area)[public_transport=platform]->.all; 
node(area)[highway=bus_stop]-> .min;
(.all; - .min;) ;

No you don’t.
Publish accurately your full code.and explain what program you’re using to run it.

Meinst du damit das:
[out:json][timeout:25];
{{geocodeArea:Köln}}->.searchArea;
node["public_transport"="platform"]["highway"!="bus_stop"](area.searchArea);
out geom;

https://overpass-turbo.eu/s/23Ub

Da kommt bei mir auch 99 heraus

  1. Publish your code as ‘preformatted text’ so it avoids being translated. (Koln → Cologne)
  2. Your code requires an out statement.
  3. The area constant isn’t global. It needs to be stored & reused in a variable:
    area[name="Köln"]->.City; and (area.City)
  4. However, there’s no need to use the subtraction method:
area[name="Köln"];
node(area)[public_transport=platform][highway!=bus_stop];
out center;

The above returns 99.
Note:It returns objects which have other highway tags such a highway=platform.

1 Like
area[name="Köln"]->.k;
(node(area.k)[public_transport=platform]; - node(area.k)[highway=bus_stop];);
out center;

Bringt auch nur 99 Nodes. Es liegt also nicht an dem Ausdruck in der Differenz, sondern eher an der Verwendung von ‘area’.

2 Likes

Dein Beitrag (sollte eine Antwort auf fx99 sein) scheint vielversprechend zu sein.
Er erklärt das Problem zwar noch nicht, aber gibt einen Hinweis wo wir noch weiter denken müssen.

@bernward1 , zwei Beiträge oberhalb ist doch die Erklärung, warum Du die Zuweisung zu Variablen vornehmen musst:

Except I’ve provide an example where it isn’t required in this instance.

1 Like

Den wichtigen 3. Punkt von DaveF hatte ich leider übersehen.
DaveF hat die richtige Lösung geliefert.

Das 1. Statement
area[name=“Köln”]; hat als Ergebnismenge eine Area
Das 2. Statement
node(area)[public_transport=platform]; hat in der Ergebnismenge nur noch Nodes und keine Area.
Das 3. Statement
node(area)[highway=bus_stop]; liefert daher keinen Knoten mehr, denn es gibt keine Area als Eingabe.

Mit der Differenz wird richtigerweise nichts mehr abgezogen und die Ergebnismenge entspricht der Ergebnismenge des zweiten Statement.