OverpassTurbo:

Ich habe einige funktionierende Abfragen mit jeweils definierten “searchArea”:

area(3600000000)->.searchArea;
// QueryIN: Alle zu wählenden NWR
(
   nw["amenity"](area.searchArea);
   nw["shop"](area.searchArea);
  nwr[~"abandoned"~"."](area.searchArea);
)->.QueryIN;
// QueryOUT: Alle nicht zu berücksichtigenden NWR
(
nwr ["network"="Münchner Verkehrs- und Tarifverbund"](area.searchArea);
)->.QueryOUT;
(.QueryIN; - .QueryOUT;);
out meta center;

Nun möchte ich die ohne “searchArea”, d.h. auf die aktuelle Kartenansicht anwenden. Nach dieser Anleitung habe ich versucht

  • die area-Zeile zu ersetzen durch [bbox:{{bbox}}],
  • area.searchArea jeweils zu ersetzen durch {{bbox}}.
    Das liefert nur einen Haufen Fehler; wie funktioniert es richtig?

Ich glaube, du must in deiner query jeweils
(area.searchArea)
ersetzen durch
({{bbox}})

Danke,

Das habe ich gemacht, meine Nachricht, zweiter Spiegelstrich:

Die korrigierte query klappt prima ausserhalb von München.
D.H.: overpass hat Probleme, die daten zu QueryOUT zu sammeln, wenn bbox zu groß ist.

Besser gleich beide Bedingungen kombinieren:


[bbox:{{bbox}}];
(
   nw["amenity"]["network"!="Münchner Verkehrs- und Tarifverbund"];
   nw["shop"]["network"!="Münchner Verkehrs- und Tarifverbund"];
   nwr[~"abandoned"~"."]["network"!="Münchner Verkehrs- und Tarifverbund"];
);

out meta center;

NB: Die Prüfung mit dem “network” scheint mir dennoch etwas merkwürdig, auch schon im ersten Post hier. Ich hätte eher erwartet, über die entsprechenden network-Relationen auch die Member zu berücksichtigen.

Es funktioniert so:

  • die area-Zeile zu ersetzen durch [bbox:{{bbox}}]; NICHT [bbox:{{bbox}}], wie ich oben geschrieben hatte.
  • area.searchArea jeweils zu ersetzen durch {{bbox}}.

Das ist nicht notwendig, mit [bbox:{{bbox}}]; hast du schon eine globale bbox definiert, d.h. ein (area.searchArea) braucht es dann nicht mehr, es kann ersatzlos gestrichen werden.

Und ja, es ist nicht unbedingt ressourcenschonend, erst alles komplett aufzubereiten und dann nachher die Objekte zu verwerfen, die nicht benötigt werden.

Danke,

Aber das funktioniert bei mir nicht:
1. Existierende Variante mit searchArea; liefert eine große Anzahl von Punkten

area(3600062484)->.searchArea;
// QueryIN: Alle zu wählenden NWR
(
   nw["amenity"](area.searchArea);
   nw["shop"](area.searchArea);
  nwr[~"abandoned"~"."](area.searchArea);
)->.QueryIN;
// QueryOUT: Alle nicht zu berücksichtigenden NWR
(
nwr ["network"="Münchner Verkehrs- und Tarifverbund"](area.searchArea);
)->.QueryOUT;
(.QueryIN; - .QueryOUT;);
out meta center; 

2. searchArea ersetzt durch bbox, sonst unverändert; liefert: “Karte ist leer”

// area(3600062484)->.searchArea;
[bbox:{{bbox}}];
// QueryIN: Alle zu wählenden NWR
(
   nw["amenity"](area.searchArea);
   nw["shop"](area.searchArea);
  nwr[~"abandoned"~"."](area.searchArea);
)->.QueryIN;
// QueryOUT: Alle nicht zu berücksichtigenden NWR
(
nwr ["network"="Münchner Verkehrs- und Tarifverbund"](area.searchArea);
)->.QueryOUT;
(.QueryIN; - .QueryOUT;);
out meta center; 

3. ALLE area.searchArea ersetzt durch {{bbox}}; liefert liefert eine große Anzahl von Punkten in der aktuellen Ansicht

// area(3600062484)->.searchArea;
[bbox:{{bbox}}];
// QueryIN: Alle zu wählenden NWR
(
   nw["amenity"]({{bbox}});
   nw["shop"]({{bbox}});
  nwr[~"abandoned"~"."]({{bbox}});
)->.QueryIN;
// QueryOUT: Alle nicht zu berücksichtigenden NWR
(
nwr ["network"="Münchner Verkehrs- und Tarifverbund"]({{bbox}});
)->.QueryOUT;
(.QueryIN; - .QueryOUT;);
out meta center; 

Die Kombination von .QueryIN; mit .QueryOUT in einen Schritt mache ich später, es ist (für mich) schon so kompliziert und verwirrend!

Um in deinem Beispiel zu bleiben, ich meinte eigentlich so etwas:


[bbox:{{bbox}}];
// QueryIN: Alle zu wählenden NWR
(
   nw["amenity"];
   nw["shop"];
  nwr[~"abandoned"~"."];
)->.QueryIN;
// QueryOUT: Alle nicht zu berücksichtigenden NWR
(
nwr ["network"="Münchner Verkehrs- und Tarifverbund"];
)->.QueryOUT;
(.QueryIN; - .QueryOUT;);
out meta center; 

In deinem Beispiel 2 ist immer noch (area.searchArea) drin. Da du das Lesen der Areas aber in Zeile 1 auskommentiert hast, ist die “searchArea” leer und es kommt kein Ergebnis raus.

Durch die Kombination wird m.E. eher einfacher: du selektierst alle “amenity” und sagst gleichzeitig, dass diese kein “network” = “Münchner Verkehrs- und Tarifverbund” Tag haben dürfen. Alles “amenity” ohne “network”, oder mit “network” = “xyz” (oder andere Werte) bleiben weiterhin im Ergebnis.

Genau das macht:


nw["amenity"]["network"!="Münchner Verkehrs- und Tarifverbund"];

@mmd: Ihr solltet im Projekt mal über eine vollständig andere Syntax diskutieren. Eine Syntax die “gesprächiger”, aber auch deutlich intuitiver und (selbst-)dokumentierender ist. Vielleicht etwas für eine Studien-/Projektarbeit.

Diese query (entsprechend den Vorschägen von mmd) liefert die gewünschten Resultate:
https://overpass-turbo.eu/s/1k2c

Danke @mmd,

jetzt habe ich es verstanden.