Overpass: Mehrfach-Merkmale für IN und OUT

website und url sind doch Schlüssel, oder?

Ich sehe aber gerade, dass bei meiner Abfrage auch z.B. public_bookcase gefunden wird (wg. “pub”). Die Abfrage müsste man also noch etwas verfeinern.

“|” funktioniert so aber nur bei regulären Ausdrücken und “!” versteht diese regulären Ausdrücke jedoch nicht. Das [!“website|url”] würde also nach einem einzigen Schlüssel “website|url” suchen, den es so natürlich nicht gibt. Das “|” funktioniert hier also nicht als logische Bedingung “oder”.

Wir machen heute mal was anderes:

[bbox:{{bbox}}];
nwr["amenity"~"^(restaurant|cafe|bar|pub)$"](if:is_tag("website") + is_tag("url") == 0);
out geom;

Und warum erhalte ich dann als Ergebnis Nodes usw. bei denen website oder url (oder beides) fehlt (stichprobenartig kontrolliert)? Lt. deiner Aussage dürfte das nicht funktionieren, weil es ein “website|url” nicht gibt. Ich bin irritiert…

[!“website|url”] bewirkt, dass aus der Ergebnismenge alle Objekte rausgeworfen werden, die ein (hypothetisches) “website|url” Tag haben. Da es ein solches Tag aber nicht gibt, hat dieser Filter keinen Effekt.

Letztlich führt dieser Ausdruck also weder dazu, dass Objekte mit “website”, noch Objekte mit “url” herausgefiltert werden. Es ist eigentlich völlig egal, ob ein Objekt eines dieser beiden Tags (oder auch beide) hat oder nicht.

Bitte auch nochmal in der Doku nachschauen: https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Not_exists

Intern wird aus node[!name]; ein node[“name”!~“.*”]; und somit sollte auch hoffentlich klar sein, dass der Key “Name” kein regulärer Ausdruck sein darf.

Ah, OK, jetzt hab ichs verstanden. Ich habe das “[!“website|url”]” mal weggelassen und das Ergebnis ist dasselbe. Danke für deine Geduld ;).

Danke @mmd,

Wenn ich es richtig sehe, funktioniert die Suche für die angegebenen “amenity” korrekt. Aber aus dieser Auswahl sollen doch die NWR entfallen, die nicht einmal eine Internet-Angabe haben, also weder “website”=* noch “url”=.
Und ich hatte vergessen, die auszuschließen, die ein Merkmal “website:menu”=
haben.

Ich verstehe das Wort “entfallen” hier nicht. Du hattest doch ganz am Anfang geschrieben, “für den aktuellen Schwerpunkt möchte ich eine Overpass-Abfrage, die Restaurants etc. findet aber solche ohne website=* / url=*”.

Das ist genau das, was die Abfrage macht: es werden alle amenity in der Bbox zurückgeliefert, die weder ein website noch url Tag haben.
Ergänzungen mit weiteren Tags bitte analog selbst vornehmen.

Zur Erklärung noch: is_tag(“website”) ist entweder 1, wenn das Objekt ein “website” Tag hat, oder eben “0” wenn ein solches Tag nicht vorhanden ist. Gleiches gilt auch für das “url” Tag. Wenn ich diese Werte dann aufaddiere, kann ich genau festlegen, welche Objekte im Ergebnis drin sind.

Als Beispiel, ein " <= 1" statt “== 0” würde also nur Objekte zurückliefern, die nicht “website” und “url” gleichzeitig haben.

Aber könnte man nicht auch explizit schreiben: node[~“website|url”!~“.*”] ? Dann müsste es doch gehen?

Ich verwende bei mir z.B. rel[~‘type’~‘route’] allerdings links ohne ‘|’

Die Kombination aus regulärem Ausdruck für den Key und Negation wird leider (noch) nicht unterstützt. Siehe https://github.com/drolbr/Overpass-API/issues/589

Ich bitte vielmals um Entschuldigung, in meiner ersten Anfrage fehlte ein Komma; mein Fehler; tut mir leid. So wäre es richtig gewesen:

…möchte ich eine Overpass-Abfrage, die Restaurants etc. findet,
aber solche ohne website=* / url=* … ausschließt.

Auch zum Verstehen finde ich meinen ursprünglichen Ansatz mit IN und OUT recht gut, mal in Prosa:
IN: alle NWR mit “amenity” = restaurant ODER cafe ODER bar ODER pub
OUT1: alle NWR (OHNE “website” = * UND OHNE “url” = )
OUT2: Alle NWR mit “website:menu”=

RESULT = IN - OUT1 - OUT2

OUT1 soll die ausschließen, die gar keine Internet-Präsentation haben; die haben auch keine Speisekarte im Internet.
OUT2 soll die ausschließen, die bereits ein Merkmal “website:menu”=* haben.

Danke, Michael

Ah, die Tücken der doppelten Verneinung, vielleicht hätte ich einen Blick in den aktuellen Schwerpunkt werfen sollen :smiley:

Also dann eher so etwas:


[bbox:{{bbox}}];
nwr["amenity"~"^(restaurant|cafe|bar|pub)$"][~"^(website|url)$"~"."][!"website:menu"];
out geom;

Edit: url und website geändert auf regulären Ausdruck…

Funktioniert, vielen Dank! Nach Wiki habe ich noch fast_food ergänzt:

[bbox:{{bbox}}];
nwr["amenity"~"^(restaurant|cafe|bar|pub|fast_food)$"](if:is_tag("website") + is_tag("url") > 0)[!"website:menu"];
out geom;

Vielleicht noch im ersten Teil

nwr["shop"="street_vendor"]

ergänzen?

Weil in OSM keine Internetadresse eingetragen ist haben die Restaurants auch keine Speisekarte im Internet ? :roll_eyes:

Ja, “hier”(in meiner Nähe schon) weil ich “website”=* eingetragen habe. Grundsätzlich ist es m.E. weniger sinnvoll, eine Speisekarte ins Internet zu stellen aber Adresse und Telefonnummer und ein Bild der Lokation nicht darzustellen …

vielleicht wurde auch eine vorhandene Website nur noch nicht in OSM erfasst. Nach Deinem Vorgehen werden diese weiterhin nicht erfasst bleiben.

Es gibt externe Reservierungsdienste, die haben ggf. Speisekarten, auch wenn das Restaurant selbst keine Webseite hat.

Ich dachte, die Overpass-Abfrage sollte nicht nur für Dich in Deinem Gebiet sein sondern allen Teilnehmern der Wochenaufgabe zur Verfügung gestellt werden. Liege ich da falsch ?

Mit

würde das dann so aussehen:

[bbox:{{bbox}}];
(
  nwr["amenity"~"^(restaurant|cafe|bar|pub)$"][~"^(website|url)$"~"."][!"website:menu"];
  nwr["shop"="street_vendor"][~"^(website|url)$"~"."][!"website:menu"];  
);  
out geom;

(macht keinen großen Unterschied, es gibt weltweit nur 6 relevante Nodes mit street_vendor)

Danke mmd,

großartig! Trotz des minimalen Unterschieds

habe ich mir Deine Lösung gemerkt in meiner Beispielsammlung für zukünftige Overpass-Aufgaben.
Für Deine Unterstützung bn ich sehr dankbar! Gruß, Michael

Ja, in der Tat …

das hatte ich vor. Nach der Kritik hier werde ich das nicht weiter verfolgen und die Lösung von mmd nur für mich selbst anwenden.
Obwohl ich der Meinung bin, dass die Schwerpunkte häufig einen schönen Einstieg für OSM-Neulinge bieten würden, wenn Sie denn mit solchen Hilfsmitteln versehen würden! Beim aktuellen Schwerpunkt #71 wurde m.E. diese Chance verpasst, da lediglich die Key:website:menu - Seite hilfreich ist, diese aber nicht in Deutscher Sprache zur Verfügung steht.