Geo-Service
Höhen, Höhenprofile, Horizontlinien, Gebäudeumrisse, Grundstücksgrenzen, Orthofotos und Gebäudemodelle für Deutschland und Österreich. Der Dienst liefert JSON über HTTPS und rechnet auf einem eigenen Bestand aus amtlichen Laserscan- und Vermessungsdaten.
- Basisadresse https://geoservice.schnee.co.at
- Anmeldung Kopfzeile X-API-Key
- Antwortformat JSON, UTF-8
- Eingabesystem EPSG:4326 (WGS84)
- Internes System EPSG:3035
- Stand dieser Seite August 2026
AnmeldungJede Anfrage braucht einen Schlüssel
Alle Endpunkte verlangen einen API-Schlüssel. Er wird als Kopfzeile
X-API-Key mitgeschickt, nicht als Abfrageparameter, damit er nicht
in Protokolldateien und Verlaufslisten landet. Einen Schlüssel bekommt man vom
Betreiber. Er beginnt mit gs_ und ist danach unveränderlich.
Es gibt zwei Rechtestufen. lesen erlaubt alle abfragenden Endpunkte. verwalten erlaubt zusätzlich die steuernden Endpunkte, die den Zwischenspeicher des Dienstes anfassen. Welche Stufe ein Endpunkt verlangt, steht in jeder Tabelle rechts.
Erster AufrufHöhe eines Punktes
Der kürzeste sinnvolle Aufruf fragt die Geländehöhe und die Oberflächenhöhe an einem Punkt ab. Alle Beispiele auf dieser Seite laufen so, wie sie hier stehen, sobald der eigene Schlüssel eingesetzt ist.
curl -H "X-API-Key: gs_ihrschluessel" \ "https://geoservice.schnee.co.at/height?lat=48.0&lon=13.8"
{
"dgm_height": 426.01,
"dom_height": 426.02,
"coordinate_reprojected": { "x": 4604584.3, "y": 2772450.4 },
"quelle": {
"namensnennung": "Datenquelle: BEV, data.bev.gv.at, CC BY 4.0",
"quellen": [ { "herausgeber": "BEV", "lizenz": "CC-BY-4.0", "erfassungsjahr": 2022 } ]
}
}
dgm_height ist die Geländehöhe in Metern über dem Meer,
dom_height die Höhe der Oberfläche einschließlich Bewuchs und
Bebauung. Liegt der Punkt außerhalb des Bestands, stehen beide Werte auf
null. Das Feld quelle enthält die Namensnennung, die
bei einer Weitergabe der Werte mitgeführt werden muss.
Höhen und ProfilePunktwerte, Schnitte, Umgebungsgitter
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| GET/height | lat, lon | Gelände- und Oberflächenhöhe an einem Punkt. | lesen |
| POST/profile | Körper: start, end als lat und lon resolution_m (1, 10, 100, 500) |
Höhenschnitt entlang einer Linie. Antwort ist eine Liste mit distance, dgm_elevation und dom_elevation. | lesen |
| POST/profile_alt | Körper: freies Objekt resolution_m |
Gleiche Aufgabe wie /profile, nimmt aber eine abweichende Schreibweise des Körpers an. Für neue Anbindungen /profile nehmen. | lesen |
| GET/api/terrain_surround | anchor_lat, anchor_lon, step, i_min, i_max, j_min, j_max, include_dom |
Gitter der Umgebungshöhen um einen Punkt, in Schrittweiten von 10, 100 oder 500 Metern. Für Ansichten der weiteren Umgebung. | lesen |
| GET/api/tile_mesh | xmin, ymin, xmax, ymax | Höhengitter in voller Auflösung für einen Ausschnitt. xmin und xmax sind Längen, ymin und ymax Breiten in WGS84. Große Antwort, gepackt übertragen. | lesen |
| GET/transform | x, y, from_crs, to_crs | Koordinatenumrechnung zwischen den Bezugssystemen. | lesen |
curl -X POST -H "X-API-Key: gs_ihrschluessel" -H "Content-Type: application/json" \
-d '{"start": {"lat": 48.00, "lon": 13.80}, "end": {"lat": 48.01, "lon": 13.81}}' \
"https://geoservice.schnee.co.at/profile?resolution_m=1"
HorizontVerschattung rundum
/horizon liefert für 360 Richtungen den Höhenwinkel des Horizonts,
getrennt für Gelände und Oberfläche, jeweils mit der Entfernung des Hindernisses.
Damit lässt sich die Verschattung eines Standorts über den Tages- und
Jahresverlauf rechnen.
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| GET/horizon | lat, lon, obs_height | 360 Werte mit azimut, hoehenwinkel_gelaende, hoehenwinkel_oberflaeche und den zugehörigen Entfernungen. obs_height ist die Beobachterhöhe über Gelände, Standardwert 1,8 Meter. | lesen |
| GET/preload | lat, lon, blocking | Lädt die Umgebung des Punktes in den Arbeitsspeicher. Mit blocking=true kehrt der Aufruf erst zurück, wenn alle Auflösungsstufen bereitstehen. | lesen |
| GET/preload_status | lat, lon | Fortschritt eines laufenden Vorabladens. | lesen |
| GET/horizon/cache-stats | keine | Kennzahlen des Arbeitsspeicherbestands. | lesen |
/preload?blocking=true auf und danach
/horizon. Eine Zeitgrenze von mindestens 120 Sekunden ist beim
ersten Aufruf sinnvoll.
Gebäude und GrundstückeUmrisse aus eigenem Bestand
Die Umrisse kommen aus dem eigenen Bestand des Dienstes und nicht aus einer
fremden Live-Abfrage. Der Ausschnitt wird als bbox in der
Reihenfolge minLon, minLat, maxLon, maxLat übergeben.
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| GET/api/osm/gebaeude | bbox | Gebäudeumrisse aus OpenStreetMap als GeoJSON-artige Liste. | lesen |
| GET/api/kataster/flurstuecke | bbox, quelle | Grundstücksgrenzen im Ausschnitt. quelle schränkt auf eine Herkunft ein, zum Beispiel at-bev. | lesen |
| GET/api/kataster/flurstueck | lat, lon | Das eine Grundstück, in dem der Punkt liegt. | lesen |
| GET/api/vektor/bestand | keine | Datenstand der Vektorquellen mit Zeitpunkt des letzten Imports. | lesen |
curl -H "X-API-Key: gs_ihrschluessel" \ "https://geoservice.schnee.co.at/api/osm/gebaeude?bbox=13.79,47.99,13.81,48.01"
WindWindklima je Richtung
Das Windklima stammt aus dem Global Wind Atlas 4.0 und liegt für Deutschland, Österreich und die Schweiz auf einem Gitter von 0,025 Grad vor. Geliefert wird der nächste Gitterpunkt. Die Werte gelten für ebenes Gelände einheitlicher Rauigkeit und sind noch nicht der Wind am Standort.
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| GET/api/wind/klima | lat, lon | Häufigkeit je Richtung sowie Weibull A und k für fünf Rauigkeiten und sechs Höhen von 10 bis 250 m. Zwölf Sektoren zu 30 Grad, der erste um Nord. Außerhalb des Bestands 404. | lesen |
curl -H "X-API-Key: gs_ihrschluessel" \ "https://geoservice.schnee.co.at/api/wind/klima?lat=48.06&lon=13.60"
WetterNiederschlag und Temperatur über einer Fläche
Die Werte stammen aus den Rastern der Wetterdienste mit 1 km Zellweite: GeoSphere
Austria (INCA stündlich, SPARTACUS täglich), Deutscher Wetterdienst (RADOLAN und
HOSTRADA stündlich, HYRAS täglich) und MeteoSchweiz (täglich). Geliefert wird das
flächengewichtete Mittel über alle Rasterzellen unter dem Vieleck. Zellen ohne Wert
fallen aus dem Mittel, ein Zeitschritt ohne jeden Wert steht als null.
Alle Zeiten in UTC.
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| POST/api/wetter/reihe | flaeche, groesse, takt, von, bis, raster | flaeche ist ein GeoJSON-Polygon oder -MultiPolygon in WGS84, groesse eines von niederschlag, temperatur, temperatur_min, temperatur_max, takt eines von stunde, tag, monat. von und bis sind Tage, beide eingeschlossen. Die Antwort nennt beginn und schritt_s, die Reihe werte, dazu immer die Monatswerte mit der Zahl fehlender Schritte und das gewählte Raster. raster legt ein Raster fest, sonst gilt das mit der größten Abdeckung. Ohne Bestand 404, über 20.000 Rasterzellen 422. | lesen |
curl -X POST -H "X-API-Key: gs_ihrschluessel" -H "Content-Type: application/json" \
-d '{"flaeche": {"type": "Polygon", "coordinates": [[[13.59,48.05],[13.61,48.05],[13.61,48.07],[13.59,48.07],[13.59,48.05]]]},
"groesse": "niederschlag", "takt": "monat", "von": "2024-01-01", "bis": "2024-12-31"}' \
"https://geoservice.schnee.co.at/api/wetter/reihe"
BewuchsLaub- oder Nadelwald
Der Laubtyp des Baumbestands stammt aus dem Copernicus Land Monitoring Service (Dominant Leaf Type 2018) und liegt für Deutschland, Österreich und die Schweiz als Raster von 10 m vor. Je Gitterpunkt wird der Wert der Rasterzelle geliefert, in der er liegt.
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| GET/api/bewuchs/waldart | xmin, ymin, xmax, ymax, punkte_x, punkte_y | Ausschnitt in WGS84, höchstens 50 km. Die Punkte liegen gleichmäßig zwischen den Rändern. art läuft zeilenweise von ymin nach ymax: 0 kein Wald oder unbekannt, 1 Laub, 2 Nadel. Außerhalb des Bestands 404. | lesen |
curl -H "X-API-Key: gs_ihrschluessel" \ "https://geoservice.schnee.co.at/api/bewuchs/waldart?xmin=13.599&ymin=48.058&xmax=13.607&ymax=48.063&punkte_x=61&punkte_y=61"
AdressenAnschrift zu Koordinate und zurück
Eine Suche für Österreich, Deutschland und die Schweiz. Zuerst wird im amtlichen
Register gesucht (Österreich, Schweiz, Nordrhein-Westfalen, Berlin, Hamburg,
Thüringen), Schreibfehler werden dort unscharf erkannt. Was das Register nicht
kennt, kommt aus OpenStreetMap über den eigenen Photon-Dienst des Geoservice,
notfalls über Nominatim. Jeder Treffer trägt im Feld quelle seine
Herkunft: amtlich oder osm.
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| GET/api/adresse/suche | q, limit, land, nur, gebiet | Adressen zu einer Adresszeile, beste zuerst, mit Koordinate. limit liegt bei höchstens 50. land grenzt auf AT, CH oder DE ein. nur=amtlich schaltet OpenStreetMap ab. gebiet grenzt auf österreichische Gemeindekennziffern oder deren Anfänge ein und schaltet OpenStreetMap ebenfalls ab. | lesen |
| GET/api/adresse/rueckwaerts | lat, lon, umkreis, nur | Die nächste Adresse zu einer Koordinate. umkreis in Metern, 10 bis 2000. Ohne amtlichen Treffer im Umkreis antwortet OpenStreetMap, außer bei nur=amtlich. | lesen |
| GET/api/quelle_am_ort | lat, lon | Die vorgeschriebene Namensnennung für Luftbild und Höhenmodell an genau dieser Stelle. Die Herausgeber wechseln an jeder Landesgrenze. | lesen |
curl -H "X-API-Key: gs_ihrschluessel" \ "https://geoservice.schnee.co.at/api/adresse/suche?q=Mösl%205,%204841%20Ungenach&limit=5"
Treffer aus OpenStreetMap stehen unter der Open Database License. Wer sie anzeigt, nennt „© OpenStreetMap-Mitwirkende“.
OrthofotoLuftbilder
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| GET/tiles/{z}/{x}/{y}.png | jahr | Luftbildkachel im üblichen Kachelschema von Netzkarten. Ohne jahr wird die neueste Aufnahme geliefert. Antwort ist ein Bild, kein JSON. | lesen |
| GET/api/orthofoto/in_viewport | min_lat, max_lat, min_lon, max_lon | Welche Luftbildkacheln im Ausschnitt vorliegen. | lesen |
| GET/api/orthofoto/coverage | keine | Abdeckung des Luftbildbestands als Kennzahlen. | lesen |
| GET/api/orthofoto/debug_tiles | limit, offset | Kachelliste mit Umgrenzung für Prüfansichten. | lesen |
| GET/api/orthofoto/debug_image/{kachel_id} | Pfad: kachel_id | Einzelne Luftbildkachel als Bild. | lesen |
Bestand und DatenstandWas liegt vor und wie alt ist es
Vor einer Berechnung lohnt die Frage, ob für den Ort überhaupt Daten vorliegen und aus welchem Jahr sie stammen. Maßgeblich ist das Erfassungsjahr, nicht der Zeitpunkt des Imports.
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| GET/tile_info | lat, lon | Angaben zur Kachel am Punkt, mit Herausgeber und Erfassungsjahr. | lesen |
| GET/api/tiles_in_viewport | min_lat, max_lat, min_lon, max_lon, limit, datentyp, jahr_von, jahr_bis, ohne_jahr |
Kacheln im Ausschnitt, filterbar nach Datentyp und Erfassungsjahr. limit liegt bei höchstens 2000. | lesen |
| GET/api/search_tiles | query, limit | Kachelsuche nach Kennung oder Name. | lesen |
| GET/kacheln | keine | Übersicht der importierten Kacheln. | lesen |
| GET/api/datenstand/uebersicht | keine | Kennzahlen zum Datenstand des gesamten Bestands. | lesen |
| GET/api/datenstand/raster | zellgroesse_m, datentyp | Datenstand als grobes Raster, für Übersichtskarten. | lesen |
| GET/api/datenstand/kachel/{kachel_id} | Pfad: kachel_id | Datenstand einer einzelnen Kachel mit Herkunft der Angaben. | lesen |
| GET/api/quellen | keine | Alle Herausgeber mit der vorgeschriebenen Namensnennung. | lesen |
| GET/api/quelle_am_ort | lat, lon | Namensnennung für Luftbild und Höhenmodell an einer Stelle, siehe Adressen. | lesen |
| GET/api/kennzahlen | keine | Kennzahlen je Quelle. | lesen |
| GET/api/regionen | keine | Hinterlegte Regionen des Bestands. | lesen |
| GET/api/tiles/resolution-status | keine | Welche Auflösungsstufen je Datentyp vollständig vorliegen. | lesen |
| GET/api/tiles/active-job | keine | Läuft gerade eine Erzeugung von Auflösungsstufen. | lesen |
| GET/api/tiles/generation-status/{job_id} | Pfad: job_id | Fortschritt einer Erzeugung. | lesen |
Die Endpunkte zu Lizenzen und Regionen mit den Verben POST, PUT und DELETE dienen der Pflege des Bestands und verlangen die Stufe verwalten. Sie sind für fremde Anbindungen ohne Belang.
ZwischenspeicherNur mit der Stufe verwalten
Der Dienst hält Höhendaten im Arbeitsspeicher. Diese Endpunkte greifen dort ein. Ein falscher Aufruf verlangsamt den Dienst für alle Nutzer, deshalb verlangen sie einen Schlüssel der Stufe verwalten.
| Endpunkt | Parameter | Beschreibung | Stufe |
|---|---|---|---|
| GET/api/cache/tiles | bbox_min_x, bbox_min_y, bbox_max_x, bbox_max_y, data_type |
Liest die Höhenwerte, die derzeit im Zwischenspeicher liegen. | lesen |
| PATCH/api/cache/tiles | Körper: Umgrenzung, data_type, heights | Überschreibt Höhenwerte im Zwischenspeicher, etwa um ein geplantes Bauwerk in die Verschattung einzurechnen. | verwalten |
| POST/api/cache/reload-1m | Körper: Umgrenzung, data_type | Holt die Originaldaten in feinster Auflösung zurück und verwirft eigene Änderungen im Ausschnitt. | verwalten |
| POST/api/cache/preload-with-modifications | Körper: lat, lon, radius, modifications | Lädt einen Bereich und wendet dabei eine Liste von Änderungen an. | verwalten |
| DELETE/api/cache/clear | lat, lon, radius | Verwirft den Zwischenspeicher eines Bereichs und erzwingt damit eine Neuberechnung. | verwalten |
| POST/api/tiles/generate-resolutions | tile_type, resolution | Erzeugt fehlende Auflösungsstufen. Läuft über Stunden und belastet die Datenbank stark. | verwalten |
FehlercodesWas die Antwort bedeutet
| Code | Bedeutung | Was zu tun ist |
|---|---|---|
| 200 | Anfrage erfolgreich. | Nichts. |
| 401 | Kein oder kein gültiger Schlüssel. Auch bei gesperrtem oder abgelaufenem Schlüssel. | Kopfzeile X-API-Key prüfen. Bleibt es dabei, beim Betreiber nachfragen. |
| 403 | Der Schlüssel ist gültig, die Rechtestufe reicht für diesen Endpunkt nicht. | Einen Schlüssel der Stufe verwalten anfordern oder den abfragenden Endpunkt nehmen. |
| 404 | Kein Datensatz zu dieser Kennung, oder für den Ort liegen keine Daten vor. | Zuerst /tile_info aufrufen und die Abdeckung prüfen. |
| 422 | Ein Parameter fehlt oder hat den falschen Typ. Die Antwort nennt das betroffene Feld. | Feldnamen und Zahlenformat prüfen. Der Dezimaltrenner ist der Punkt. |
| 500 | Fehler im Dienst, meist eine nicht erreichbare Datenbank. | Nach kurzer Wartezeit erneut versuchen, sonst beim Betreiber melden. |
| 504 | Zeitgrenze überschritten, typisch beim ersten Horizont in einem neuen Gebiet. | Eigene Zeitgrenze erhöhen und vorher /preload aufrufen. |
Fehlerantworten sind immer JSON und tragen das Feld detail mit
einem Text in deutscher Sprache.
Grenzen und PflichtenVor der ersten Anbindung lesen
- Räumliche Abdeckung. Deutschland und Österreich, je nach Datentyp
unterschiedlich vollständig. Außerhalb liefert der Dienst
nullstatt eines geschätzten Werts. - Bezugssysteme. Ein- und Ausgabe erfolgen in WGS84. Die einzige
Ausnahme sind die Endpunkte des Zwischenspeichers mit ihren Feldern
bbox_min_x bis bbox_max_y, die in EPSG:3035 rechnen. Umrechnen lässt sich
beides mit
/transform. - Antwortgrößen. Höhengitter und Umrisslisten werden gepackt übertragen. Ein Ausschnitt in feinster Auflösung erreicht ungepackt zweistellige Megabyte, der eigene Zugriff sollte also gzip annehmen.
- Zeitgrenzen. Punktabfragen antworten in Millisekunden. Der erste Horizont oder das erste Gitter eines Gebiets braucht Sekunden bis Minuten. Eine Zeitgrenze unter 120 Sekunden ist zu knapp.
- Gleichzeitige Aufrufe. Ein einzelner Schlüssel sollte nicht mehr als fünf Anfragen gleichzeitig stellen. Der Dienst zählt Aufrufe je Schlüssel mit.
- Namensnennung. Die Daten stammen von amtlichen Stellen mit
Nennungspflicht. Jede datenliefernde Antwort trägt die Namensnennung im
Feld
quelleoder in der KopfzeileX-Quellenangabe. Sie muss in jeder Veröffentlichung mitgeführt werden, die auf diesen Werten beruht. - Ablauf und Sperre. Ein Schlüssel kann ein Ablaufdatum tragen und jederzeit gesperrt werden. Beides zeigt sich als 401. Eine Sperre wirkt innerhalb einer halben Minute.
- Keine Gewähr. Die Höhen stammen aus Laserscandaten mit einer
Erfassung, die je Gebiet Jahre auseinanderliegt. Für eine Planung ist das
Erfassungsjahr über
/tile_infozu prüfen.
/openapi.json und ist dem Betreiber vorbehalten. Wer einen
Klienten daraus erzeugen will, fragt die Datei beim Betreiber an.