Overpass: Frage zur Differenzbildung

Hallo Community,

es geht darum, alle Golf-Fairways außerhalb von eines gemappten Golfplatzes (leisure=golf_course) zu finden. Overpass-Link
Nach Studium der Anleitung dachte ich, dass die folgende Abfrage funktionieren müsste:

[out:json][timeout:800][bbox:{{bbox}}];

area[leisure=golf_course];
out body;

(way[golf=fairway];)->.fairways;

(.fairways; - way[golf=fairway](area););

out geom meta;

Allerdings werden weiterhin alle Fairways gefunden, die Differenzbildung funktioniert nicht! Warum?

[out:json][timeout:800][bbox:{{bbox}}];

area[leisure=golf_course];
out body;

(way[golf=fairway](area);)->.golfcoursefairways;

(way[golf=fairway];)->.fairways;

(.fairways; - .golfcoursefairways;);

out geom meta;

(In den Overpass-Beispielen wird bei der Differenz immer eine Ergebnis-Variable genommen, statt die Abfrageformel direkt zu verwenden.)

Scheint zumindest gemäß diesem Testgebiet zu funktionieren …
Du musst jetzt nur noch einen Weg außerhalb verifizieren. :wink:

Nach einigem Probieren ergab sich folgende Overpass Abfrage http://overpass-turbo.eu/s/YDz

[out:json][timeout:60][bbox:{{bbox}}];

way[leisure=golf_course];
map_to_area ->.b;

way(area.b)[golf=fairway] -> .fairGolf;
// .fairGolf out;.fairGolf >;out geom;

way[golf=fairway] -> .fairAll;
//.fairAll out;.fairAll >;out geom;

(way.fairAll; -way.fairGolf;);
out; > ; out geom;

im Gegensatz zu

area[leisure=golf_course];

das alle golf_course weltweit (siehe Areas: 28040 rechts unten im Fenster) findet, bewirkt

way[leisure=golf_course];
map_to_area ->.b;

dass nur die golf_course im aktuellen Fenster verwendet werden.

Der Rest sucht erst die fairways innerhalb der golf_course area .b, dann alle fairways und bildet schließlich die
Differenz.

Nachtrag: http://overpass-turbo.eu/s/YDA Abfrage mit ein paar Kommentaren!

@fx99: damit fehlen die multipolygone leisure=golf_course
Zufällig entdeckt https://www.openstreetmap.org/relation/2212411

Danke für den Hinweis.

Sollte einfach zu lösen sein:

// alle golf=fairway außerhalb leisure=golf_course
[out:json][timeout:60][bbox:{{bbox}}];

// suche alle way/rel[leisure=golf_course] in bbox
(way[leisure=golf_course];
rel[leisure=golf_course];
);
// convert to area
map_to_area ->.golfcourse;

// golf=fairway innerhalb leisure=golf_course
way(area.golfcourse)[golf=fairway] -> .fairGolf;
// .fairGolf out;.fairGolf >;out geom;

// alle golf=fairway
way[golf=fairway] -> .fairAll;
//.fairAll out;.fairAll >;out geom;

// Differenz und Ausgabe
(way.fairAll; -way.fairGolf;);
out; > ; out geom;

Hatte mich auch schon gewundert, dass die Originalabfrage 7MB liefert.
(Wobei sich mir aber die Frage stellt, welchen Sinn hier eine Fenster-reduzierte Abfrage machen soll, denn dort leisure=golf_course + golf=fairway anzuzeigen reicht ja eigentlich um Probleme zu finden bzw. zu sehen)

Grundsätzlich aber eine geometrisch interessante Sache, die IMHO in
https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example
gehört - konnte dort zumindest nix vergleichbares finden.

Habs mal eingefügt:
https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example#golf.3Dfairway_outside_leasure.3Dgolf_course

[bbox:{{bbox}}] wird aber ungewöhnlich angezeigt:

[bbox:(bbox={{{minlon}}},{{{minlat}}},{{{maxlon}}},{{{maxlat}}})]

Das ging ja schnell … Du willst wissen, warum sich das OSM-Wiki da so seltsam verhält?

Die Stelle finde ich passend, schau Dir mal dan Gesamtzusammenhang an
https://wiki.openstreetmap.org/w/index.php?title=Overpass_API/Overpass_API_by_Example&action=edit&section=21
so wie ich das auf die Schnelle sehe, sind die Code-Beispiele in eine “{{OverpassTurboExample…”-Vorlage integriert.

Die
==== Pub tour in Dublin ====
dagegen nicht - sollte nicht unbedingt Vorbild sein :wink:


Nachtrag:
nach Bearbeitungen, auch in der Überschrift, ist der Link:
https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example#golf.3Dfairway_outside_leisure.3Dgolf_course