Zum Inhalt springen

DTM Geländemodell

Das DTM ist ein Höhenkachelsatz für ganz Österreich: Geländehöhe ohne Gebäude und Bewuchs, kodiert als Farbe (Terrain-RGB) und damit direkt für raster-dem, Schummerung und 3D-Gelände in MapLibre, Mapbox GL und kompatiblen Clients verwendbar.

Tileset-IDrelief-terrainrgb
Dateirelief-terrainrgb-20250915-ed2e4341.pmtiles
Stichtag15.09.2025
Größe39,1 GB (39 067 398 974 Bytes)
SHA-256ed2e4341e6e10d0fa62880e2f1c91d9828fc3de84b7ddd541417110221c8121a
Formatwebp, Kodierung mapbox, 512 px
Zoomstufenz5–z16
Gebiet (WGS84)9,5306 / 46,3697 / 17,1661 / 49,0235 (W/S/O/N)
Kacheln664 979 adressiert, 663 931 verschiedene Inhalte
LizenzCC BY 4.0

Die Tabelle wird beim Build aus viewer/tiles-manifest.json und dem PMTiles-Header der Datei erzeugt (Stand der Erzeugung: 2026-11-07).

Auf die Karte klicken: Höhe und RGB der Kachel.

Der Klick liest die Kachel der aktuellen Zoomstufe (maximal z16) per Range-Request, dekodiert das Pixel am Klickpunkt mit der Formel aus Abschnitt 4 und zeigt Höhe und RGB-Wert. Bei eingeschaltetem 3D steht zusätzlich der Wert von queryTerrainElevation dabei.

import * as maplibregl from "maplibre-gl";
import { Protocol } from "pmtiles";
maplibregl.addProtocol("pmtiles", new Protocol().tile);
const map = new maplibregl.Map({
container: "map",
center: [12.694, 47.074], zoom: 11, pitch: 60,
style: {
version: 8,
sources: { dem: { type: "raster-dem", url: "pmtiles://https://tiles.mapx.at/relief-terrainrgb-20250915-ed2e4341.pmtiles", tileSize: 512, encoding: "mapbox", maxzoom: 16 } },
terrain: { source: "dem", exaggeration: 1.2 },
layers: [{ id: "hill", type: "hillshade", source: "dem" }]
}
});
map.on("click", (e) => console.log(map.queryTerrainElevation(e.lngLat)));
höhe_m = -10000 + (R · 65536 + G · 256 + B) · 0,1
  • Wertebereich theoretisch −10000 m bis +1 667 721,5 m in Schritten von 0,1 m; in Österreich liegen die Werte zwischen rund 115 m (Neusiedler See) und rund 3 798 m (Großglockner).
  • Gerundet wird beim Schreiben auf 0,1 m (Rundung zur geraden Zahl bei genau .5, siehe Rust-Code oben), Werte außerhalb des Bereichs werden begrenzt.
  • WebP verlustfrei: verlustbehaftete Kompression würde die kodierten Höhen direkt verfälschen. Keine Alpha-Information nutzen, RGB-Bänder unverändert lesen (kein Farbmanagement, kein Premultiplied Alpha).
  • 512 × 512 Pixel, ohne Rand (kein 1-px-Skirt). In MapLibre tileSize: 512 und encoding: "mapbox" angeben.

Ausführlich: Terrain-RGB.

Bei 47,5° N, 512-px-Kacheln, Web-Mercator:

Zoomm pro PixelKantenlänge Kachel (km)Anmerkung
z51 652846
z6826423
z7413212
z8207106
z910353
z105226
z112613
z12136,61
z136,463,30
z143,231,65
z151,610,83
z160,810,41höchste gespeicherte Stufe (≈ 1-m-Ursprung)
z170,400,21Overzoom (Client)

Die Daten stammen aus einem 1-m-Raster. z16 (≈ 0,8 m pro Pixel) ist die erste Stufe, die die Quelle nicht vergröbert; z15 würde etwa 60 % der Pixel verwerfen. Über z16 gibt es keine Kacheln: MapLibre zoomt ab z17 die z16-Kachel auf (maxzoom: 16 setzen), es entsteht keine zusätzliche Information. Die Stufen z15 bis z5 sind 2×2-Mittel im Höhenraum (Dekodieren, mitteln, neu kodieren), kein Bild-Resize.

  • Quelle: BEV (Bundesamt für Eich- und Vermessungswesen), ALS-DTM 1 m, Geonetwork-Serie 5ce253fc-b7c5-4362-97af-6556c18a45d9, Airborne Laserscanning, nur Gelände.
  • 55 Quellkacheln à 50 × 50 km als COG in EPSG:3035 (ETRS89-LAEA), Stichtag 15.09.2025.
  • Reprojektion nach EPSG:3857 bilinear (nicht Lanczos: Überschwinger an steilen Klippen würden die Höhen selbst verfälschen).
  • Erzeugt mit der Rust-Pipeline crates/mapx-rgb (ohne GDAL).

Belegt (Quelle: relief/README.md, relief/test/hoehen_check.py, Vault mapx/Terrain-RGB-Rust-Test):

  • Quantisierung 0,1 m.
  • z16 gegen das bilinear interpolierte Quell-DTM an drei Prüfpunkten: Jauerling 960,10 m (Δ −0,03 m), Donau bei Melk 203,90 m (Δ −0,04 m), Stift Melk 248,30 m (Δ +0,02 m).
  • Rust-Render gegen die Quelle auf zehn Kacheln (Alpen und Melk): höchstens 0,05 m Abweichung, das ist der Rundungsfehler.
  • Kantenzusammenführung: Pixel am Rand der Quellkacheln werden aus den gültigen Nachbarn renormiert.

Grenzen:

  • DTM zeigt das Gelände ohne Gebäude, Bäume und Brücken. Für die Oberfläche gibt es das DSM.
  • Kein Messwert außerhalb der Daten. Das Gebiet des Kachelsatzes ist das Rechteck 9,53–17,17° O, 46,37–49,02° N. Pixel ohne Quelldaten (außerhalb Österreichs, Lücken) sind eine glatte Fortsetzung des Geländes, keine Messung. Im Test (Durchstich Melk gegen das DTM außerhalb des Gebiets) lag der Fehler dieser Fortsetzung im Mittel bei 11 m, am Übergang springt die Höhe im Median um bis zu 17 m (steiles Gelände, Maximum 46 m).
  • Abweichung der Übersichtsstufen z15 bis z5 gegenüber der Quelle: nicht gemessen (nur Mittelbildung im Höhenraum, verglichen wurde Python gegen Rust, nicht gegen die Quelle).
  • Gesamtgenauigkeit über ganz Österreich (RMSE gegen unabhängige Referenzpunkte): nicht gemessen. Die Lagegenauigkeit und vertikale Genauigkeit des BEV-Modells selbst gibt der Datenanbieter an, hier nicht wiederholt.
  • Der Anteil von z15 und z16 an der Dateigröße ist nicht gemessen.
Produkt Inhalt Datei Größe
DTM (diese Seite) Gelände relief-terrainrgb-20250915-ed2e4341.pmtiles 39.1 GB
DSM Oberfläche (inkl. Gebäude, Bewuchs), gleiche Kodierung, BEV ALS-DOM 1 m relief-dsm-terrainrgb-20250915-d19cb434.pmtiles 82.1 GB
Höhenlinien Vektor, z10–z16 siehe Manifest

Ein nDSM (DSM minus DTM, Bewuchs- und Gebäudehöhe) ist angedacht, aber nicht verfügbar.

Jede Datei trägt Stichtag und Hash im Namen und ändert sich nie; ein neuer Stand ist eine neue Datei.

Stichtag Datei SHA-256
15.09.2025 relief-terrainrgb-20250915-ed2e4341.pmtiles ed2e4341e6e10d0fa62880e2f1c91d9828fc3de84b7ddd541417110221c8121a

Prüfen: curl -s {url} | sha256sum (lädt die ganze Datei). Alle Änderungen: Changelog.

Pflicht nach CC BY 4.0. Text:

Relief: BEV – ALS-DTM 1 m (Stichtag 15.09.2025), CC BY 4.0

HTML (wie in den PMTiles-Metadaten, MapLibre übernimmt es automatisch aus dem Tileset):

Relief: <a href="https://data.bev.gv.at/geonetwork/srv/ger/catalog.search#/metadata/5ce253fc-b7c5-4362-97af-6556c18a45d9">BEV – ALS-DTM 1 m</a> (Stichtag 15.09.2025), CC BY 4.0

Mehr: Lizenz.

Warum WebP verlustfrei? Weil jede Veränderung der Farbe eine andere Höhe bedeutet. Verlustfrei ist die einzige Wahl, die die 0,1-m-Kodierung erhält.

Warum kein Nodata? Ein Nodata-Wert (zum Beispiel Höhe 0) würde in Hillshade und 3D als Loch oder Graben erscheinen. Fehlende Pixel werden deshalb vor dem Kodieren aus dem Füllraster (flächentreues Mittel, Push-Pull-Fortsetzung) glatt ergänzt. Kacheln ganz ohne Quelldaten gibt es nicht (Lücke im PMTiles). Wo ein Wert vorliegt, ist er daher nicht automatisch ein Messwert, siehe Abschnitt 7.

Unterschied zu Mapbox und MapTiler? Gleiche Kodierung wie mapbox-terrain-dem-v1 (Mapbox-Formel, 512 px, aber ohne 1-px-Rand). Mapbox liefert Daten bis z14 (PNG, nur über SDKs, Abrechnung je Request), MapTiler nach unserem Kenntnisstand bis etwa z12 (nicht nachgeprüft). mapx geht bis z16, ist nur auf Österreich begrenzt, verlustfrei, schlüsselfrei und als ganze Datei herunterladbar.

Warum sehe ich Nähte in der Schummerung? Kacheln mit 1-px-Rand (514 px) erzeugen mit tileSize: 512 Nähte. Diese Kacheln sind randlos 512 × 512, tileSize: 512 ist richtig.