x

Fragen zu overpass CSV output mode


  1. Fragen zu overpass CSV output mode · Jo Cassel (Gast) · 28.03.2019 16:37 · [flux]

    Hallo,
    der overpass CSV output mode ist eine feine Sache,
    was ich bisher nicht verstehe:

    1. Special field name
    https://wiki.openstreetmap.org/wiki/Ove … ield_names
    Muss der/müssen die (z.B. ::id ) immer ganz vorne in der Zeile stehen ?

    2. Kann man dem output einen eigenen Text zuordnen, z.B vor Special field name ::id immer ein "https://www.openstreetmap.org/node/" ?

    fragende Grüße
    Jo


    • Re: Fragen zu overpass CSV output mode · streckenkundler (Gast) · 28.03.2019 17:09 · [flux]

      Also ich hatte mich kürtlich auch mit diesem Thema beschäftigt.

      Meine Abfrage:

      [out:csv(::type,::id,"WDPA_ID:ref",protection_title,short_protection_title,name,operator,leisure,start_date,wikidata,::user)][timeout:45];
      {{geocodeArea:Brandenburg}}->.searchArea;
      (
      
      way["boundary"="protected_area"]["protect_class"="4"]["name"](area.searchArea);
      relation["boundary"="protected_area"]["protect_class"="4"]["name"](area.searchArea);
      );
      out␣meta;
      

      Liefert eine Liste aller in Brandenburg erfassten Schutzgebiete mit protect_class=4 als csv.

      Man sieht z.B., das ::id nicht immer ganz vorn stehen muß. Ein anderer, von mir verwendeter Wert (::user) steht z.B. am Ende.

      Was für mich interessant wäre...
      Ich habe in der ersten Zeile die Felder in der Reihenfolge angegeben, die ich möchte. Gibt es ein Kürzel, mit dem ist dagen kann "zeige mir alle erfassten Schlüssel-Wert-Kombinationen an, die bei Flächen und Relationen mit protect_class=4 gefunden werden.

      Sven


    • Re: Fragen zu overpass CSV output mode · Jo Cassel (Gast) · 28.03.2019 17:51 · [flux]

      1) Stimmt! hatte bei meinen Tests wohl ein Komma oder sonstwas vergessen.

      Was deine Frage anbelangt, verstehe ich dein Problem nicht so recht, über das "Daten"-Fenster einer normalen overpass-Abfrage hat Du doch alle Key-Values und dementsprechend kannst Du deine out:csv-Zeile nach Lust und Laune erweitern...

      Ich würde halt gern einen Link aus der ::id generieren ...


    • Re: Fragen zu overpass CSV output mode · streckenkundler (Gast) · 28.03.2019 18:07 · [flux]

      Jo Cassel wrote:

      Was deine Frage anbelangt, verstehe ich dein Problem nicht so recht, über das "Daten"-Fenster einer normalen overpass-Abfrage hat Du doch alle Key-Values und dementsprechend kannst Du deine out:csv-Zeile nach Lust und Laune erweitern...

      Na ich würde gerne wissen, was neben den genannten Feldern noch so erfasst sein könnte, also alle Schlüssel-Wert-Kombinationen.

      Sven


    • Re: Fragen zu overpass CSV output mode · mmd (Gast) · 28.03.2019 18:14 · [flux]

      Jo Cassel wrote:

      1. Special field name
      https://wiki.openstreetmap.org/wiki/Ove … ield_names
      Muss der/müssen die (z.B. ::id ) immer ganz vorne in der Zeile stehen ?

      2. Kann man dem output einen eigenen Text zuordnen, z.B vor Special field name ::id immer ein "https://www.openstreetmap.org/node/" ?

      1. "::id" muss nicht vorne stehen
      2. Ja, ich poste gleich mal was

      [out:csv(link,::id;false;"")];
      node
      [amenity=drinking_water]
      ({{bbox}});
      
      convert␣bla␣::id␣=␣id(),
      link␣=␣"https://www.openstreetmap.org/node/";
      
      out;
      

      streckenkundler wrote:

      was neben den genannten Feldern noch so erfasst sein könnte, also alle Schlüssel-Wert-Kombinationen.

      Dafür gibt's folgendes Issue: https://github.com/drolbr/Overpass-API/issues/296


    • Re: Fragen zu overpass CSV output mode · MKnight (Gast) · 28.03.2019 18:42 · [flux]

      mmd wrote:

      [out:csv(link,::id;false;"")];
      node
      [amenity=drinking_water]
      ({{bbox}});
      
      convert␣bla␣::id␣=␣id(),
      link␣=␣"https://www.openstreetmap.org/node/";
      
      out;
      

      Kannst Du grob erklären, was da passiert, speziell

      convert␣bla␣::id␣=␣id(),
      

      verstehe ich nicht, was es tut und wozu man das benötigt, die id steht doch schon oben (::id)?


    • Re: Fragen zu overpass CSV output mode · mmd (Gast) · 28.03.2019 19:06 · [flux]

      Klar. Das convert jubelt jedem Knoten noch ein zusätzliches Tag "link" zu, damit man den per CSV auch ausgeben kann.

      Am besten sieht man das ohne CSV-Ausgabe:

      ␣<bla␣id="348734973">
      <tag␣k="link"␣v="https://www.openstreetmap.org/node/"/>
      </bla>
      <bla␣id="348773400">
      <tag␣k="link"␣v="https://www.openstreetmap.org/node/"/>
      </bla>
      <bla␣id="457404945">
      <tag␣k="link"␣v="https://www.openstreetmap.org/node/"/>
      </bla>
      

      Im CSV-Header wird dann "link" und die ::id ohne Trennzeichen ausgegeben, damit entsteht dann der Link.


    • Re: Fragen zu overpass CSV output mode · Jo Cassel (Gast) · 28.03.2019 20:04 · [flux]

      @mmd, danke, aber, ich kriege damit zwar Links hin, aber auch nur Links, s.
      http://overpass-turbo.eu/s/Htu
      Alles andere scheint mir unter den Tisch zu fallen, mein Ziel ist aber eigentlich ein Link innerhalb anderer Spalten, also hier vor/bei ::id
      http://overpass-turbo.eu/s/Htr


    • Re: Fragen zu overpass CSV output mode · mmd (Gast) · 28.03.2019 20:32 · [flux]

      Ok, das war nicht so ganz ersichtlich aus der Frage.

      //␣Beispiel␣Baumliste
      
      [out:csv(ref,::id,_link,"species:de",circumference;true;"\t")];
      
      {{geocodeArea:"Bergpark␣Wilhelmshöhe"}}->.searchArea;
      
      node["natural"="tree"]["circumference"]["ref"](area.searchArea);
      
      foreach␣{
      
      convert␣bla
      ::id␣=␣id(),
      ::␣␣=␣::,
      _link␣=␣"https://www.openstreetmap.org/node/"␣+␣id();
      
      out;
      }
      

    • Re: Fragen zu overpass CSV output mode · streckenkundler (Gast) · 28.03.2019 21:39 · [flux]

      mmd wrote:

      Ok, das war nicht so ganz ersichtlich aus der Frage....

      Aha... Danke.

      [Edit] ein "::type" liefert den Geometrietyp, Wie kann das in die Abfrage eingebaut werden, so daß als Link

      _link = "https://www.openstreetmap.org/" + Geometrietyp + ID bei rauskommt?

      meine Q&D-Idee klappt nicht:

      [out:csv(::type,::id,_link,"WDPA_ID:ref",protection_title,short_protection_title,name,operator,leisure,::user)][timeout:45];
      {{geocodeArea:Brandenburg}}->.searchArea;
      (
      
      way["boundary"="protected_area"]["protect_class"="4"]["name"](area.searchArea);
      relation["boundary"="protected_area"]["protect_class"="4"]["name"](area.searchArea);
      );
      foreach␣{
      
      convert␣bla
      ::id␣=␣id(),
      ::type␣=␣type(),
      ::␣␣=␣::,
      _link␣=␣"https://www.openstreetmap.org/"␣+␣type()␣+␣id();
      
      out;
      }
      

      Sven


    • Re: Fragen zu overpass CSV output mode · MKnight (Gast) · 28.03.2019 22:27 · [flux]

      mmd wrote:

      Klar. Das convert jubelt jedem Knoten noch ein zusätzliches Tag "link" zu, damit man den per CSV auch ausgeben kann.

      Danke. Habs halbwegs verstanden.


    • Re: Fragen zu overpass CSV output mode · mmd (Gast) · 28.03.2019 22:50 · [flux]

      streckenkundler wrote:

      [Edit] ein "::type" liefert den Geometrietyp, Wie kann das in die Abfrage eingebaut werden, so daß als Link

      Den ::type kann man nicht für erzeugte Objekte setzen, deshalb verwende ich einfach "type": https://overpass-turbo.eu/s/HtC


    • Re: Fragen zu overpass CSV output mode · Jo Cassel (Gast) · 29.03.2019 09:43 · [flux]

      @mmd: Super!

      So wie ich das sehe schafft es dein script auch zusätzlich Zeichen hinter die ::id zu setzen, also z.B. sowas funktioniert:

      _link␣=␣"https://www.openstreetmap.org/node/"␣+␣id()␣+␣"test";
      

      Das ist für mich interessant, weil ich meine id-Links gern (z.B. in eine Wiki-Vorlage) einpacken würde, wie die von OSM: {{Node|1234567890|tools=no}}

      _link␣=␣"{{Node|"␣+␣id()␣+␣"|tools=no}}";
      

      funktioniert allerdings nicht - wegen Sonderzeichen?


    • Re: Fragen zu overpass CSV output mode · streckenkundler (Gast) · 29.03.2019 10:11 · [flux]

      Jo Cassel wrote:

      funktioniert allerdings nicht - wegen Sonderzeichen?

      probiere mal:

      _link␣=␣"{"+"{"␣+␣type()␣+␣"|"␣+␣id()␣+␣"|tools=no"␣+␣"}"␣+"}";
      

      da kommt bei mir

      {{way|154096377|tools=no}}
      {{relation|5873810|tools=no}}
      

      jenachdem welcher Typ gefunden wird.

      https://overpass-turbo.eu/s/Hu5

      Sven


    • Re: Fragen zu overpass CSV output mode · mmd (Gast) · 29.03.2019 10:36 · [flux]

      Jo Cassel wrote:

      funktioniert allerdings nicht - wegen Sonderzeichen?

      Es könnte sein, dass overpass turbo da querschießt und versucht alles zwischen {{ und }} zu ersetzen.


    • Re: Fragen zu overpass CSV output mode · Jo Cassel (Gast) · 29.03.2019 10:44 · [flux]

      @streckenkundler: Stimmt, wenn man den String aufteilt dann gehts, bereits die Trennung der einführenden Doppelklammer scheint bei mir zu reichen:

      _link␣=␣"{"␣+␣"{Node|"␣+␣id()␣+␣"|tools=no}}";
      

      (::type brauche ich gerade nicht, ist in dem Zusammenhang aber natürlich gut zu wissen ...)

      Damit bin ich weitergekommen,
      Danke in die Runde!

      Jo


    • Re: Fragen zu overpass CSV output mode · streckenkundler (Gast) · 29.03.2019 10:58 · [flux]

      mmd wrote:

      Es könnte sein, dass overpass turbo da querschießt und versucht alles zwischen {{ und }} zu ersetzen.

      Ja, den Eindruck hatte bei meinem Test...

      Jo Cassel wrote:

      (::type brauche ich gerade nicht, ist in dem Zusammenhang aber natürlich gut zu wissen ...)

      Damit bin ich weitergekommen,
      Danke in die Runde!

      Letztendlich kann die Verwendung von ::type dann auch als Fehlerprüfung gesehen werden, falls mal ein Objekt dabei ist, daß nicht explizit (in deinem Beispiel) als node erfasst wäre...

      Das, was ich in dem Zusammenhang gelernt habe: immer overpass den Objekttyp (node, way relation) ermitteln lassen...

      ...und schaden würde die Verwendung für dein Beispiel sicher auch nicht... 🙂

      Sven,

      ...der sich auch für das Gelernte bedankt...


    • Re: Fragen zu overpass CSV output mode · drolbr (Gast) · 29.03.2019 13:43 · [flux]

      streckenkundler wrote:

      Gibt es ein Kürzel, mit dem ist dagen kann "zeige mir alle erfassten Schlüssel-Wert-Kombinationen an, die bei Flächen und Relationen mit protect_class=4 gefunden werden.

      Sven

      Probiere für eine Statistik mal bitte

      [out:csv(cnt_nd,cnt_wy,cnt_rel,key,value)];
      {{geocodeArea:Brandenburg}}->.searchArea;
      (
      
      way["boundary"="protected_area"]["protect_class"="4"]["name"](area.searchArea);
      relation["boundary"="protected_area"]["protect_class"="4"]["name"](area.searchArea);
      );
      for->.i␣(keys())
      {
      for.i->.j(t[i.val])
      {
      make␣stat␣cnt_nd=count(nodes),cnt_wy=j.count(ways),cnt_rel=j.count(relations),key=i.val,value=j.val;
      out;
      }
      }
      

      und wenn das zu unübersichtlich ist die Zusammenfassung per Key durch

      [out:csv(cnt_nd,cnt_wy,cnt_rel,key,value)];
      {{geocodeArea:Brandenburg}}->.searchArea;
      (
      
      way["boundary"="protected_area"]["protect_class"="4"]["name"](area.searchArea);
      relation["boundary"="protected_area"]["protect_class"="4"]["name"](area.searchArea);
      );
      for(keys())
      {
      make␣stat␣cnt_nd=count(nodes),cnt_wy=count(ways),cnt_rel=count(relations),key=_.val,value=set("{"+t[_.val]+"}");
      out;
      }
      

      Der jeweils untere For-Block passt hinter so ziemlich jede Abfrage anstelle des out. Das ist auch der Grund, Nodes mitzuzählen, obwohl deren Anzahl in diesem Fall immer 0 ist.


    • Re: Fragen zu overpass CSV output mode · streckenkundler (Gast) · 29.03.2019 15:09 · [flux]

      drolbr wrote:

      Probiere für eine Statistik mal bitte...

      Danke,

      das hilft schon mal gut weiter...

      Sven