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.

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’.

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.

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.