[overpass turbo] Punkte suchen, die bestimmte Schlüssel NICHT enthalte

Ich bin mal wieder an der Syntax gescheitert. Ich versuche eine Abfrage zu bauen, die mir alle Recyclingcontainer anzeigt, die keinen Schlüssel zum abzugebenen Produkt enthalten. Nach vielem nachlesen und rumprobieren habe ich aufgegeben.

Mein letzter Versuch war:

node[amenity=recycling]["recycling"!~".*"] ({{bbox}});

Also:
ich suche alle

node[amenity=recycling]

die keinen Eintrag mit

recycling:*

haben.

:confused:

Wahrscheinlich weniger effizient, dafür einfacher zu verstehen:


[amenity=recycling]({{bbox}})->.r1;
nwr.r1["recycling"]->.r2;
(.r1; - .r2;);

Die obere Abfrage sollte eigentlich funktionieren. Hier z.B. eine Abfrage mit heritage=1 und ohne Wikidata-Tag: Link

Das ist etwas komplizierter, weil die regulären Ausdrücke für Keys nicht mit Negation kombiniert werden können.
Warum brauchen wir das? Wir wollen ja alle amenity ohne recycling:* finden, also z.B. kein recycling:glass, recycling:paper, etc. nicht nur “recycling”.


[bbox:{{bbox}}];
(node[amenity=recycling]->.all; - node.all[~"^recycling:"~"."];);
out;

Issue: https://github.com/drolbr/Overpass-API/issues/589

Jetzt war mmd etwas schneller…
https://overpass-turbo.eu/s/1klH
Also alle amenity=recycling abzüglich derer, die ein recycling:* Tag haben.

In deinem ursprünglichen Vorschlag ist das Problem, dass du “recycling” schreibst, was aber kein regulärer Ausdruck ist. Du bräuchtest einen, der sagt “Kein Tag das mit recycling: anfängt”. Das ist aber soweit ich es sehe in Overpass nicht möglich.

Der Code von rainerU hat nicht direkt funktioniert, so dass ich auf den Code von mmd gewechselt habe. Der liefert was ich brauche.

Danke für eure Hilfe.
Ich habe sofort wieder eine neue Frage → Neuer Thread

Ich hab mal noch die vereinfachte Variante, die im Github-Issue beschrieben wurde, testweise zusammengeklimpert:


[bbox:{{bbox}}];
node[amenity=recycling][!~"^recycling:"];
out meta;

Link: https://overpass-turbo.eu/s/1ko6

Das ist aktuell einzige Möglichkeit, das ganze zu testen. Die Query funktioniert so auf keiner anderen Overpass Instanz!