Mit out geom; erhält jeder Punkt der Geometrie eines Ways seine eigene elevation. Bei einer Bahn sind der erste und der letzte Punkt die beiden Stationen; ihre Differenz ist also der Höhenunterschied.
Diese Abfrage findet die Seilbahnen rund um Zermatt. Die Tabelle sortiert sie nach Höhenunterschied.
Die Abfrage
[out:json][timeout:25]; way["aerialway"~"^(cable_car|gondola|chair_lift|mixed_lift|drag_lift|t-bar)$"](45.93,7.65,46.05,7.82); out geom;
Ausführen
Live-Ergebnis von overpass.ch, bis zu 12 Stunden zwischengespeichert. Kartendaten © OpenStreetMap-Mitwirkende (ODbL). Heights produced using Copernicus WorldDEM™-90 © DLR e.V. 2010-2014 and © Airbus Defence and Space GmbH 2014-2018 provided under COPERNICUS by the European Union and ESA; all rights reserved. Meerestiefen: GEBCO Compilation Group (2026) GEBCO 2026 Grid.
So funktioniert es
- Der reguläre Ausdruck passt auf die üblichen Arten von Bahnen. Stationen (
aerialway=station) und Masten sind eigene Objekte und fallen weg. out geom;liefert die Linie jeder Bahn, undelevation=1ergänzt jeden ihrer Punkte um eine Höhe.- Bahnen sind meist bergauf gezeichnet, aber nicht immer: Der Glacier Ride hier beginnt oben. Nehmen Sie die Differenz der Endpunkte ohne Vorzeichen.
- Der grösste Höhenunterschied im Gebiet ist Furi – Trockener Steg, etwa 1'060 m.
Varianten
- Viele Bahnen tragen auch
aerialway:capacity(Personen pro Stunde) undaerialway:duration(Minuten). - Alle Bahnen, gezeichnet ohne Höhen: Skilifte und Seilbahnen.
Aus Ihrem Code ausführen
Die Abfrage bleibt gleich; elevation=1 in der URL ergänzt die Höhen. Jede Höhe braucht eine Höhenabfrage aus Ihrem Kontingent.
curl 'https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/interpreter?elevation=1' \
--data-urlencode 'data@query.overpassql'
import requests
query = open("query.overpassql").read()
r = requests.post("https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/interpreter",
params={"elevation": 1}, data={"data": query}, timeout=120)
r.raise_for_status()
for el in r.json()["elements"]:
if "geometry" in el: # Linien: eine Höhe für jeden Punkt
first, last = el["geometry"][0]["elevation"], el["geometry"][-1]["elevation"]
print(el["tags"].get("name"), first, last, abs(last - first))
const res = await fetch("https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/interpreter?elevation=1", {
method: "POST",
body: new URLSearchParams({ data: query }),
});
if (!res.ok) throw new Error(await res.text());
const { elements } = await res.json();
for (const el of elements.filter((e) => e.geometry)) {
const [first, last] = [el.geometry[0].elevation, el.geometry.at(-1).elevation];
console.log(el.tags?.name, first, last, Math.abs(last - first));
}
Speichern Sie die Abfrage als query.overpassql. Sie funktioniert genauso in Overpass Turbo, QGIS und JOSM.