TerrainRGB ist eine bestimmte Art, Höheninformationen eines Digitalen Geländemodells effektiv zu speichern. Dabei werden die Höhenwerte auf die Farbkanäle Rot, Grün und Blau verteilt und die Genauigkeit auf eine Nachkommastelle reduziert. Für die meisten Anwendungsfälle genügt diese Information und erlaubt eine effektive Verarbeitung der Höheninformationen für die Visualisierung im GIS oder im Browser. Schaut man sich das so kodierte Geländemodell als Bild an, meint man psychedelische Kunst, wie auf dem Vorschaubild, vor sich zu haben. Was sich genau dahinter verbirgt, wie man ein Geländemodell dafür konvertiert und wie man das Geländemodell dann nutzen kann, möchte ich in diesem Beitrag erklären.
TerrainRGB
Wie so viele Technologien im Bereich der modernen Webkartographie wurde die Speicherung von Geländemodellen zuerst von Mapbox spezifiziert. Grund dafür war die Notwendigkeit, neben den Vector Tiles noch das Geländemodell zu speichern und verarbeiten zu können. Die Zerlegung der Höhenwerte auf die drei RGB-Kanäle ist eine smarte Idee, die eine effektive Speicherung und Übertragung ermöglicht. Zum einen wird ein bekanntes Dateiformat, in der Regel PNG, mit einer effektiven verlustfreien Komprimierung genutzt, zum anderen wird eine für viele Anwendungen ausreichende Genauigkeit von 10 Zentimetern verwendet. Es muss als keine spezielle Komprimierung oder Dateiformat implementiert werden. Praktisch werden die Bilder als PNG in Kacheln für die einzelnen Zoomstufen zerlegt und gespeichert. Durch die Zerlegung der Werte auf die drei Kanäle werden je Pixel 3 Byte an Speicherplatz verwendet. Für eine Kommazahl werden ansonsten mindestens 4 oder 8 Byte für ein Pixel benötigt.
Höhe = -10000 + ((R * 256 * 256 + G * 256 + B) * 0.1)
Die Formel zeigt die Berechnung der Höhenwerte aus den einzelnen Kanälen. Der Offset von -10.000 erlaubt die Speicherung negativer Werte, wie von Depressionen und des Meeresbodens. Die Multiplikation mit 0,1 ermöglicht die Verwendung einer Nachkommastelle. Praktisch muss man sich um die Implementierung nicht mehr kümmern. In QGIS und MapLibre GL bzw. Mapbox GL ist eine direkte Nutzung möglich. Hier wird gerne auch MapTilerTerrainRGB als Name verwendet.
TerrainRGB nutzen
Wie kann man selbst ganz einfach TerrainRGB ausprobieren oder nutzen? QGIS bringt bereits ein Geländemodell mit, das man jederzeit kostenfrei nutzen kann. Der Datensatz versteckt sich unter den XYZ Tiles in den Verbindungen und nennt sich „Mapzen Global Terrain“. Statt auf Kartenkacheln wird hier auf ein gekacheltes Geländemodell zugegriffen. Der Schlüssel zur richtigen Darstellung in QGIS liegt in der Interpretation der Werte. Hier muss Terrarium-Gelände-RGB ausgewählt sein, was ähnlich wie das Mapbox bzw. MapTiler Terrain RGB funktioniert.
Lädt man sich erst mal den Layer im QGIS, sieht er einfach nur grau aus, wie jedes Geländemodell. Schaltet man die Darstellung via Layereigenschaften oder dem Bedienfeld „Layergestaltung“ auf Schummerung um, so wird klar, dass es sich hier wirklich um ein Geländemodell und nicht nur um ein Graustufenbild handelt. Alternativ können auch on-the-fly Höhenlinien geniert werden. Alternativ kann es auch zum Drapieren von Karten oder Luftbildern als DGM/DEM verwendet werden. QGIS erkennt das anhand der Einstellungen der Datenquelle automatisch.
Die technisch komplexere Verwendung als Basis für die visuelle Geländedarstellung und zum Drapieren der Objekte im MapLibre GL JS möchte ich nur kurz demonstrieren. Damit lassen sich im Browser eindrückliche Darstellungen erzeugen, welche einen guten Eindruck einer Gebirgslandschaft vermitteln. Zum Kippen der Karte muss hier die Strg-Taste gedrückt gehalten werden. Damit lassen sich auch Höhenschichten und Profil berechnen. Die notwendigen Informationen dazu bringt ja das TerrainRGB mit.
Und wo ist nun der Haken an der Sache? Nunja, die Bereitstellung als Dienst bedingt eine definierte Auflösung entsprechen der Zoomstufen und der Kartennetzentwurf ist auf den Webmerkatorentwurf beschränkt. Damit ist die Anwendung im Wesentlichen auf die Visualisierung beschränkt. Im Beispiel sieht man auch einen Nachteil, der Berechnung der Schummerung im Browser, das zugrundeliegende Raster sichtbar. Eine richtig schöne Schummerung berechnet man besser vor. Trotzdem lohnt es sich aus meiner Sicht, mit der Technologie auseinanderzusetzen, da der Trend zu Webkarten und 2.5D/3D-Darstellungen geht.
TerrainRGB erzeugen
Die Konvertierung eines Geländemodells nach TerrainRGB nach den Mapbox/MapTiler Definition kann mittels der Kommandozeilensoftware GDAL und rasterio erfolgen. Unter Windows bietet sich die Nutzung der OSGeo4Windows Shell an. Neben den notwendigen Paketen benötigt man ein Geländemodell, das man sich zum Beispiel ganz bequem auf der Webseite OpenTopography herunterladen kann. Das DGM sollte man herunterladen, entpacken und dann in der Kommandozeile die folgenden Befehle ausführen.
- Notwendige Pakete installieren:
pip install rasterio rio-mbtiles rio-rgbify
- Projizieren der Daten nach Webmerkator:
gdalwarp -t_srs EPSG:3857 -tr 30 30 -r cubic dem_sachsen.tif sachsen_epsg3857.tif
- Umwandlung in TerrainRGB:
rio rgbify -b -10000 -i 0.1 sachsen_epsg3857.tif sachsen_epsg3857_rgb.tif
- Erzeugen der MBTiles in den Zoomstufen 8 bis 13:
rio mbtiles -o sachsen_rgb.mbtiles --title "DEM Quelle" --baselayer -f PNG --zoom-levels 8..13 sachsen_epsg3857_rgb.tif
Wer die Möglichkeit hat, die Konvertierung unter Linux auszuführen, sollte das tun. Die Software läuft mehr als doppelt so schnell. Ansonsten gilt wie immer, erst einmal ein kleines Testgebiet zu nutzen. Das Ergebnis ist ein als MBTiles verpacktes Geländemodell, welches man direkt im QGIS laden kann. Leider hat man über die Benutzeroberfläche keine Möglichkeit, die Interpretation korrekt einzustellen, sodass man in der Pythonkonsole den folgenden Befehl ausführen muss. Dafür unbedingt vorher den Layer im Layerbaum auswählen:
layer = iface.activeLayer() s = layer.source() s = s + '&interpretation=maptilerterrain' layer.setDataSource(s)
Nun kann man das Geländemodell, wie im Abschnitt TerrainRGB nutzen, im QGIS verwenden. Für das Einbinden in Webkarten muss man das MBTile noch hosten. Ich bevorzuge hierfür den Tileserver-GL, alternativ bietet sich auch Martin oder BBOX an. Alternativ bieten natürlich Firmen wie Mapbox oder MapTiler ein Hosting an bzw. haben passende Datensätze im Angebot. Auf diese Weise kann man schnell und einfach sein Geländemodell ins Web bringen.
Zusammenfassung
Mit TerrainRGB lassen sich tolle Visualisierungen für das Web erzeugen: Schummerung, Höhenschichten oder Höhenprofile können dargestellt werden und Objekte auf das Gelände drapieren. Mittels MapLibre lassen sich so 2.5D-Darstellung in guter Qualität erzeugen, welche sich sehen lassen können. Für visuell anspruchsvolle Reliefdarstellung ist eine vorberechnete Schummerung wie im Beispiel sinnvoll:
Im Desktop GIS kann man sich das TerrainRGB einfach als Dienst einbinden und für die Darstellung des Geländes nutzen. Der Weg ist schnell, einfach und für eine grobe Einordnung ausreichend. Auch hier gilt, wer die besten Daten haben möchte, muss diese selbst heraussuchen. Dass QGIS mit dem Mapzen Global Terrain einen Datensatz bereits mitbringt, ist ein tolles Feature, das wenigen bekannt sein dürfte.
Schreibe einen Kommentar