Eine Alternative zur Google Elevation API
Die Google Elevation API ist einfach zu verwenden, aber bei grossen Mengen teuer, und ihre Bedingungen schränken ein, was Sie mit den Ergebnissen tun dürfen. Die Höhen-API von overpass.ch nimmt dieselben Anfragen und liefert dasselbe JSON; für den Wechsel ändern Sie also vor allem die URL.
locations, path und samples und die Antwort bleiben gleich:
https://maps.googleapis.com/maps/api/elevation/json?locations=46.0207,7.7491&key=GOOGLE_KEY → https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/elevation?locations=46.0207,7.7491
Dieselbe Anfrage, dieselbe Antwort
curl 'https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/elevation?locations=46.0207,7.7491|35.95,-5.6'
{
"status": "OK",
"results": [
{ "elevation": 1606.3, "location": { "lat": 46.0207, "lng": 7.7491 },
"resolution": 90, "surface": "land", "dataset": "copernicus-glo90" },
{ "elevation": -678.3, "location": { "lat": 35.95, "lng": -5.6 },
"resolution": 460, "surface": "sea", "dataset": "gebco-2026" }
],
"lookups": 2
}
| Google Elevation API | overpass.ch | |
|---|---|---|
locations=lat,lng|… | ja | ja |
Kodierte Polylinien (enc:…) | ja | ja |
path mit samples | ja | ja, und jedes Ergebnis hat seine distance vom Start |
status, results[].elevation, location.lat/lng, resolution | ja | ja |
| Orte pro Anfrage | 512, nur GET | 10'000 (1'000 in Free); GET, oder POST mit JSON oder einer GPX-Datei |
| Routenprofil mit Aufstieg und Abstieg | nein | /elevation/profile |
| Land oder Meer in der Antwort | nein | surface und dataset |
| Fehler | HTTP 200 mit einem status wie INVALID_REQUEST | HTTP-Statuscodes (400, 401, 429) mit error und message |
Code, der status == "OK" prüft und results liest, funktioniert weiter. Verzweigt Ihr Code nach den Fehlerstatus von Google, prüfen Sie stattdessen den HTTP-Statuscode.
Ihren Code umstellen
import os
import requests
URL = f"https://api.overpass.ch/v1/{os.environ['OVERPASS_CH_KEY']}/elevation"
def elevations(points): # [(lat, lng), …]
out = []
for i in range(0, len(points), 1000):
r = requests.post(URL, json={"locations": points[i:i + 1000]}, timeout=30)
r.raise_for_status()
out += [res["elevation"] for res in r.json()["results"]]
return out
print(elevations([(46.0207, 7.7491), (45.9763, 7.6586)]))
const res = await fetch("https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/elevation", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ locations: [[46.0207, 7.7491], [45.9763, 7.6586]] }),
});
if (!res.ok) throw new Error(await res.text());
const { results } = await res.json();
console.log(results.map((r) => r.elevation));
- Der Schlüssel kommt in den Pfad oder in einen Header
X-API-Key, statt inkey=. - Mengen: Sie müssen nicht mehr bei 512 Orten aufteilen. Bis 1'000 passen im kostenlosen Tarif in eine Anfrage, 10'000 in den bezahlten Tarifen.
- Im Browser: Den
ElevationServiceder Maps JavaScript API können Sie nicht auf einen anderen Server umstellen. Rufen Sie den Endpunkt wie oben mitfetchauf, mit einem Schlüssel, den Sie im Dashboard auf Ihre eigene Domain beschränken.
Was es kostet
Google rechnet pro Anfrage mit bis zu 512 Orten ab: 5'000 Anfragen im Monat sind kostenlos, danach USD 5 pro 1'000 bis 100'000 Anfragen, darüber günstiger. overpass.ch zählt Höhenabfragen, eine pro Ort, und der kostenlose Tarif enthält 1 Million im Monat.
| Orte pro Monat | In Mengen von 512 oder mehr | Ein Ort pro Anfrage | ||
|---|---|---|---|---|
| overpass.ch | overpass.ch | |||
| 1 Million | kostenlos (etwa 2'000 Anfragen) | Elevation, $7 (kostenlos für nicht kommerzielle Nutzung) | etwa USD 3'575 | Elevation, $7 |
| 10 Millionen | etwa USD 73 | Elevation, $7 | etwa USD 11'500 | Medium, $79 |
| 50 Millionen | etwa USD 465 | Elevation, $7 | etwa USD 26'700 | Large, $199 |
Listenpreise von Google für die Elevation API im Oktober 2026: 5'000 kostenlose Anfragen im Monat, dann USD 5.00 pro 1'000 bis 100'000, USD 4.00 bis 500'000, USD 3.00 bis 1 Million, USD 1.50 bis 5 Millionen und USD 0.38 darüber. Ein Ort pro Anfrage ist der typische Fall einer App, die pro Klick oder pro Person einen Punkt abfragt. Auf overpass.ch begrenzen in diesem Fall eher die Anfragen pro Minute als die Höhenabfragen: 120 pro Minute im Tarif Elevation, 600 in Medium und 1200 in Large. Preise in CHF; dieselben Beträge in EUR. Der kostenlose Tarif ist zum Testen und für private, schulische und gemeinnützige Projekte.
Wenn Sie im Monat einige hunderttausend Orte in Mengen abfragen, reicht womöglich das kostenlose Kontingent von Google. Bei einzelnen Punkten und bei grossen Mengen unterscheiden sich die Kosten.
Ergebnisse speichern und auf einer Karte zeigen
- Google: Die Richtlinien der Elevation API besagen, dass Inhalte nicht vorab abgerufen, zwischengespeichert oder gespeichert werden sollen, und dass Ergebnisse auf einer Karte auf einer Google-Karte erscheinen müssen. Ohne Karte zeigen Sie das Google-Logo und die Quellenangabe.
- overpass.ch: Sie dürfen die Ergebnisse speichern und auf jeder Karte zeigen, zum Beispiel auf OpenStreetMap mit Leaflet oder MapLibre. Wenn Sie sie veröffentlichen oder anzeigen, nennen Sie die Datenquellen, wie in der Dokumentation und den Nutzungsbedingungen beschrieben.
Auflösung und Genauigkeit
Die Höhen an Land stammen aus dem Modell Copernicus GLO-90, einem weltweiten Raster mit 90 m Abstand; die Meerestiefen aus dem GEBCO-Raster (etwa 460 m). Google kombiniert mehrere Quellen und ist oft feiner, vor allem in Städten und im steilen Gebirge. Mit 90-m-Daten gilt:
- Dörfer, Täler, Strassen und hügeliges Gelände liegen meist wenige Meter daneben (Zermatt ergibt 1'606 m);
- spitze Gipfel erscheinen zu tief: das Matterhorn mit 4'210 m statt 4'478 m;
- Wälder und grosse Gebäude gehören zur Oberfläche.
Das passt gut für Höhenstufen, Routenprofile, das Ergänzen von Orten und Analysen über Regionen. Für Ingenieurwesen, Luftfahrt oder alles, wo wenige Meter zählen, verwenden Sie ein feineres, lokales Modell. Die Seite Höhen-API hat weitere Messungen.