x

Wie kann ich Eigenschaften einer Liste von Geländepunkten abfragen?


  1. Wie kann ich Eigenschaften einer Liste von Geländepunkten abfragen? · trettach (Gast) · 04.11.2021 23:32 · [flux]

    Hallo,

    wie ist es bitte möglich in der Overpass API (oder sonstwo) einen Query zu erstellen, mit einer Liste von Namen von Geländepunkten als Input vom Typ

    node["natural"="peak"]
    

    mit dem ich als Ausgabe die Eigenschaften "lat", "lon" und die tags "ele" und "name" in einer liste generieren kann?

    Das hier geht in die Richtung, aber ich würde lieber einen Code haben, in den ich nur noch eine Liste Geländepunkte (möglichst ohne Area) hineinkopieren muss.

    [out:json][timeout:95];
    {{geocodeArea:Deutschland}}->.d;
    {{geocodeArea:Schweiz}}->.ch;
    
    (
    node["natural"="peak"](area.d)(if:␣t["name"]␣==␣"Trettachspitze")({{bbox}});
    node["natural"="peak"](area.ch)(if:␣t["name"]␣==␣"Sidelhorn")({{bbox}});
    node["natural"="peak"](area.d)(if:␣t["name"]␣==␣"Höfats␣Südostgipfel")({{bbox}});
    
    );
    //␣print␣results
    out␣body;
    >;
    out␣skel␣qt;
    

    Und ich brauche nicht den gesamten output, nur:

    ␣"elements":␣[
    
    {
    "lat":␣47.3657125,
    "lon":␣10.3504473,
    "tags":␣{
    "ele":␣"2259",
    "name":␣"Höfats␣Südostgipfel",
    }
    },
    {
    "lat":␣47.3037210,
    "lon":␣10.2960572,
    "tags":␣{
    "ele":␣"2595",
    "name":␣"Trettachspitze"
    }
    },
    {
    
    "lat":␣46.5524785,
    "lon":␣8.3127092,
    "tags":␣{
    "ele":␣"2764.4",
    "name":␣"Sidelhorn",
    }
    }
    
    ]
    }
    

    • Re: Wie kann ich Eigenschaften einer Liste von Geländepunkten abfragen? · fx99 (Gast) · 05.11.2021 06:24 · [flux]

      Hallo,
      willkommen im Forum, hier werden Sie geholfen!

      Die Auswahl von Ausgabewerten geht am einfachsten über eine CSV Ausgabe,
      siehe als Beispiel http://overpass-turbo.eu/s/1cJ5

      oder hier (zusätzlich ele):

      //␣alle␣natural=peak␣in␣bbox
      [out:csv(::id,::lat,::lon,name,ele)][timeout:25];
      //␣see␣https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#CSV_output_mode
      node["natural"="peak"]({{bbox}});
      //␣print␣results
      out␣meta;
      

    • Re: Wie kann ich Eigenschaften einer Liste von Geländepunkten abfragen? · Wetterauer (Gast) · 05.11.2021 06:59 · [flux]

      Hallo trettach,
      schön dass Du hier mitmachen willst. Und schön das Du diese Frage gestellt hast. 🙂

      Da habe ich mal wieder etwas dazu gelernt.

      😄

      Edit: deutsche Sprache - schwere Sprache 🙄


    • Re: Wie kann ich Eigenschaften einer Liste von Geländepunkten abfragen? · the-asca (Gast) · 05.11.2021 09:06 · [flux]

      Moin,

      also mal kurz deine Abfrage auseinander genommen:

      ␣␣node["natural"="peak"]
      

      Damit werden alle Bergspitzen abgefragt. Schonmal richtig

      (area.d)
      

      Im Bereich Deutschland. Kannst du natürlich weglassen, diese Einschränkung, musst natürlich überlegen ob es sinnvoll ist, eine weltweite Suche loszulassen (auch wegen Performance/Last/Ausführungszeit).

      (if:␣t["name"]␣==␣"Trettachspitze")
      

      Zwar nicht falsch, aber einfacher einfach:

      ["name"="Trettachspitze"]
      

      Hier wäre dann auch der Punkt, wo du es zu einer Liste ändern könntest, indem du einen Regulären Ausdruck nimmst:

      ["name"~"^(Trettachspitze|Sidelhorn|Höfats␣Südostgipfel)$"]
      

      Vorteil: Durch | getrennt kannst du alle Angeben. Das ^ am Anfang sagt, dass kein Zeichen im Namen davor sein darf und das $ am Ende, dass nicht danach stehen darf.
      Ob so gewünscht, muss du entscheiden (bei deiner Suche wurde ja auch nur nach exakt identischem Namen gesucht. Aber so fallen halt Ausgaben wie das "Gross Sidelhorn" weg.
      Nachteil: Es frisst deutlich mehr Resourcen bei der Suche. Weltweit kannst es mit der aktuellen API wohl eher vergessen. Also besser einzeln die Abfragen dann.

      ({{bbox}})
      

      Eine erneute Einschränkung auf ein Suchgebiet. Diesmal auf die BBox, also auf den Bereich, wo die Karte gerade ausgewählt ist. Ist das gewollt? I.d.R. machen doppelte Suchgebietseinschränkungen kein Sinn.

      Ich denke mehr Sinn, wenn du nur In Deutschland und Schweiz suchst, das Suchgebiet zu einem zu machen:

      (
      {{geocodeArea:Deutschland}};
      {{geocodeArea:Schweiz}};
      )->.bereich;
      

      Kannst dann natürlich noch um z.B. Österreich erweitern indem du eine Zeile ergänzt. Und dann in dem Bereich suchen mit:

      (area.bereich)
      

      Zum Ende dann reicht für dich ein "out;". Das gibt dir die ID, Position und alle Tags (somit name und ele) zum Objekt, die anderen Tags kannst ja ignorieren.

      Alles in allem also entweder so:
      http://overpass-turbo.eu/s/1cJb (via Regulärem Ausdruck)

      Oder so:
      http://overpass-turbo.eu/s/1cJd

      Oder halt wie f99 vorschlägt machst statt json-Ausgabe es zu csv (erste Zeile) dann kannst ganz genau sagen, welche Daten du ausgegeben haben willst:
      http://overpass-turbo.eu/s/1cJe
      Willst du ein ; als Trennzeichen z.B. kannst du das auch definieren wie hier beschrieben dort:
      http://overpass-turbo.eu/s/1cJf

      Gruß,
      asca


    • Re: Wie kann ich Eigenschaften einer Liste von Geländepunkten abfragen? · GerdP (Gast) · 05.11.2021 09:27 · [flux]

      Ich frage mich, was mit

      trettach wrote:

      aber ich würde lieber einen Code haben, in den ich nur noch eine Liste Geländepunkte (möglichst ohne Area) hineinkopieren muss.

      gemeint ist. Wie sieht diese Liste denn aus?


    • Re: Wie kann ich Eigenschaften einer Liste von Geländepunkten abfragen? · trettach (Gast) · 05.11.2021 21:19 · [flux]

      Oh vielen Dank für die Hinweise mit der CSV Ausgabe und für die umfangreichen Ergänzungen und auch vollkommen richtigen Korrekturen!

      Meine Abfrage die ich machen wollte enthält einfach eine blanke Liste von Gipfelnamen:
      Trettachspitze
      Sidelhorn
      Höfats Südostgipfel
      usw.

      Es ist sehr praktikabel, einfach
      Trettachspitze|Sidelhorn|Höfats Südostgipfel|usw. zu verwenden!

      (Ich dachte schon, ich muss eine SQL Abfrage erlernen zu machen an irgendeiner Schnittstelle und dort einen Array oder Schleife einsetzen. Wahrscheinlich ist SQL nämlich die aufgebohrte Variante zur Overpass API, aber ungleich schwerer zu lernen.)