Dieses "HowItWorks" ist für Leute gedacht, die bereits Erfahrungung mit Lealfet, mapnik, gdal usw. haben und ist keine step-by-step-Anleitung.
Diese Demo stellt die Höhe in Metern auf der aktuellen Position des Mauscursors dar. Dazu wird hier keine Datenbank verwendet, sondern rein statische Dateien und läuft rein clientseitig. Grundlage hierbei ist, dass die Farbe eines Pixels in einer Kartenkachel unter dem Mauscursor mit dem Leaflet-Plugins leaflet-tilelayer-colorpicker ermitteln kann und man die Höhen in den RGB-Farben der Pixels einer Kartenkachel speichern kann, d.h. man missbraucht die RGB-Farbwerte eines Pixel als 24-Bit unsigned Integer für die Speicherung eines Höhenwerts. Eine solche Kartenkachel, die ich im Folgenden als DEM-Kachel bezeichne, sieht optisch etwas "psychodelisch" aus, z.B.
und wird deshalb im Browser nicht dargestellt, sondern stattdessen eine "normale" Kartenkachel
drübergelegt, d.h. der User sieht eine normale Kachel und der colorpicker verwendet zur Höhenermittelung die ausgeblendeten DEM-Kacheln. Daher ist die Darstellung auch etwas langsamer, da immer zwei Kacheln für die selbe Stelle geladen werden müssen.
Wie man die Höhe in den RGB-Werten umrechnet, ist vom Prinzip her egal, da man im Browser vor der Anzeige den Höhenwert eh aus den RGB-Werten selber "zurückrechnen" muss. Ich orientiere mich in dieser Demo aber an die RGB/Höhenwertumrechung von Mapbox Terrain-RGB: height = -10000 + ((R * 256 * 256 + G * 256 + B) * 0.1)
. Damit sind Höhenwerte von -10000m bis 1667721,5m möglich. Die Zahl 100000 entspricht z.B. einem Höhenwert von 0m. Terrain-RGB verwendet eine Höhengenauigkeit von 0.1m. Ich verwende in dieser Demo bei der Höhengenauigkeit der Einfachheit halber nur ganze Meter und beschränke mich auf den Höhenbereich [-10000m,10000m[. Wenn für einen Pixel kein Höhenwert bekannt sind (bei nodata im GeoTiff oder außerhalb meiner äußeren Darstellungsgrenze), setze ich R, B und G auf 0xff. Im Browser erscheint dann "k.A." statt einer Höhe.
Ich verwende als Datenausgangsbasis ein GeoTiff mit Höhendaten in der EPGS:3857-Projektion und nodata bei -32768. Zum Rendern der DEM-Kacheln verwende ich mapnik. Das GeoTiff muss für den "Missbrauch" der RGB-Werte als 24-Bit unsigned Integer vor dem Rendern noch umgewandelt werden. Dazu verwende ich gdaldem color-relief, aber auch rio scheint dafür geeignet zu sein (rio habe ich aber nicht ausprobiert):
gdaldem color-relief dem.tif colorrelief.txt -nearest_color_entry demrgb.tif
mit einer entsprechenden colorrelief.txt.
Beim Rendering der Kacheln mit mapnik ist noch wichtig, dass man beim RasterSymbolizer auf scaling oder mode verzichtet, da sonst der Missbrauch der RBG-Werte zu bösen Ergebnissen führt.
Bitte beachte, dass diese Webseite nur zu Demonstationszwecken erstellt wurde und sich die genaue URL oder die Existenz der Seite und die damit verbundenen Kartenkacheln jederzeit ändern können.
Die Darstellung deckt den 11. bis 12. Längen- und den 47. Breitengrad in den Zoomstufen 9 bis 13 ab.
Eine Vergrößerung des Bereichs ist nicht vorgesehen. Das liegt primär daran, dass ich keinen dafür geeigneten Webserver (Apache, postgres, mapnik, renderd, kostenlos, werbefrei...) zur Verfügung habe.