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

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",
  }
}

  ]
}


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;

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

Da habe ich mal wieder etwas dazu gelernt.

:smiley:

Edit: deutsche Sprache - schwere Sprache :roll_eyes:

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

Ich frage mich, was mit

gemeint ist. Wie sieht diese Liste denn aus?

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