x

Overpass: Frage zur Differenzbildung


  1. Overpass: Frage zur Differenzbildung · maxwellhill (Gast) · 02.10.2020 16:44 · [flux]

    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?


    • Re: Overpass: Frage zur Differenzbildung · GeorgFausB (Gast) · 02.10.2020 17:58 · [flux]
      [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. 😉


    • Re: Overpass: Frage zur Differenzbildung · fx99 (Gast) · 02.10.2020 19:52 · [flux]

      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!


    • Re: Overpass: Frage zur Differenzbildung · axelr (Gast) · 02.10.2020 20:17 · [flux]

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


    • Re: Overpass: Frage zur Differenzbildung · fx99 (Gast) · 02.10.2020 20:43 · [flux]

      axelr wrote:

      @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;
      

    • Re: Overpass: Frage zur Differenzbildung · Jo Cassel (Gast) · 03.10.2020 14:35 · [flux]

      fx99 wrote:

      [...]

      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.
      [...]

      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/Ove … by_Example
      gehört - konnte dort zumindest nix vergleichbares finden.


    • Re: Overpass: Frage zur Differenzbildung · fx99 (Gast) · 03.10.2020 15:26 · [flux]

      Jo Cassel wrote:

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

      Habs mal eingefügt:
      https://wiki.openstreetmap.org/wiki/Ove … olf_course

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

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

    • Re: Overpass: Frage zur Differenzbildung · Jo Cassel (Gast) · 03.10.2020 15:50 · [flux]

      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. … 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 ;-)


      Nachtrag:
      nach Bearbeitungen, auch in der Überschrift, ist der Link:
      https://wiki.openstreetmap.org/wiki/Ove … olf_course