Auf dem Meer liefert elevation=1 die Tiefe des Meeresbodens als negative Zahl, aus dem GEBCO-Raster. Das funktioniert für alles, was auf See erfasst ist: Windturbinen, Plattformen, Tonnen oder Wracks.
Diese Abfrage findet die Windturbinen in der Deutschen Bucht westlich von Helgoland und listet sie vom tiefsten Wasser an auf.
Die Abfrage
[out:json][timeout:25]; node["generator:source"="wind"](53.8,5.8,54.6,7.6); out;
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
node["generator:source"="wind"]findet Windturbinen; sie sind als Nodespower=generatorerfasst.- Der Begrenzungsrahmen liegt ganz auf See; Turbinen an Land sind also nicht dabei.
- Mit
elevation=1erhält jede Turbine eineelevation, hier zwischen etwa −23 und −40 m. Ein direkter Aufruf von/elevationsagt Ihnen zudem"surface": "sea"und welcher Datensatz geantwortet hat. - GEBCO ist ein Raster von etwa 460 m aus Vermessungen und Satellitendaten. Es liefert die Tiefe des umgebenden Meeresbodens, nicht die eines einzelnen Fundaments. Es ist nicht für die Navigation.
Varianten
- Ganze Windparks als Flächen:
nwr["power"="plant"]["plant:source"="wind"]mitout center;. - Land und Meer gemischt: Derselbe Aufruf antwortet an Land mit Höhen und auf See mit Tiefen; Sie müssen also nicht im Voraus wissen, was ein Punkt ist.
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"]:
height = el.get("elevation") or el.get("center", {}).get("elevation")
print(el.get("tags", {}).get("name"), height)
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) console.log(el.tags?.name, el.elevation ?? el.center?.elevation);
Speichern Sie die Abfrage als query.overpassql. Sie funktioniert genauso in Overpass Turbo, QGIS und JOSM.