EU-DEM und NASA SRTM-Daten
Höhendaten aus der Luft gegriffen ...
SRTM-Daten V3 «no voids»
Seit Anfang 2015 liegen verbesserte SRTM (Shuttle Radar Topology Mission) Daten vor. Die Version 3 der SRTM Daten ist in gewisser Weise eine Revolution, da erstmalig keine Höhe fehlt! Daraus lassen sich neue Features bauen, z. B. die Berechnung einer Schummerung (hill shading) auf dem eigenen Rechner. GNavigia kann das. Wie es geht, wie man das konfiguriert und was das bedeutet, habe ich auf einer separaten Seite im Netz erläutert:
«Schummerung aus SRTM V3 Daten lokal erzeugen»
mit der ultimativen Erweiterung für Skandinavien (Norwegen, Schweden, Finnland):
«SRTM V3 gleiche Daten aus EU-DEM-Daten lokal erzeugen»
Denn aktuell gilt: Die OSM-Gemeinde verwaltet die Kacheln immer restriktiver. Zeitweise waren auf dem Netz keine Kacheln für die Schummerung verfügbar. Um von all dem Zirkus unabhängig zu sein, gibt es nun (auch) eine handgemachte Schummerung. Zusammen mit einer PostgreSQL Datenbank, die für die Schummerung nicht erforderlich ist, kann man sich unter Einsatz von ca. 100 GB Plattenplatz «in seine eigene Welt» zurückziehen. Aber auch ohne das liefert der neue Ansatz ein deutlich schöneres Kartenbild:
GNavigia (Next) mit Imposm3-Datenbankmodell
Viel besser wird die Darstellung ohnehin erst, wenn man selbst Kartografie betreibt. Das folgende Beispiel zeigt eine allererste Studie auf Basis einer PostGIS Datenbank mit IMPOSM3 Datenbankmodell. Die sichtbare Besonderheit ist aber eine gang andere: Wurde die Schummerung früher über die fertige Karte gelegt, wird sie heute zwischen Karte und Beschriftung positioniert. Dadurch wird auch kleine Schrift nicht mehr unleserlich überlagert. Das Projekt, das noch Wochen in Anspruch nehmen wird, hört auf den Arbeitstitel «best lesbarer Text»!
Die Berechnung von Höhenlinien
Aus den Höhendaten lassen sich Höhenlinien ableiten. Das Resultat soll, wie in den «guten alten Zeiten» der Kartografie, die Zahlen so darstellen, dass sie mit dem Fuß ins Tal zeigen, alles andere wäre dilettantisch. Die hier gewählte Vorgehensweise ist besonders anschaulich und einfach, allerdings lassen sich die Linien nur bedingt glätten, die Resultate sind noch experimentell.
Damit das Ergebnis besser aussieht, wird eine Zoomstufe höher gerechnet als für die Darstellung erforderlich, also 15 bei Stufe 14. Die Kachelfläche wird entsprechend vier mal so groß, also 512x512 Pixel. Zuletzt wird das Ergebnis wieder auf 256x256 verkleinert, was für ansprechende Linien und gut lesbare Zahlen sorgt. Klicken Sie auf die Grafik, um die Vergrößerung anzuzeigen!
- Für jedes Pixel wird eine Höhe berechnet und abgelegt. Danach wird der Übergang über zuvor festgelegte, runde Werte ermittelt und das Pixel farblich gekennzeichnet. Für ausgezeichnete Werte wird ein dunkleres Pixel erzeugt. Damit sind die Linien bereits sichtbar.
- Knickpunkte und Einzellinien werden entfernt und so in erster Näherung geglättet.
- Für die Beschriftung mit Zahlen erfolgt (dann doch) eine Linienverfolgung. Einem Höhenniveau können mehrere Linienabschnitte zugeordnet sein. Wenn ein Anfangspunkt von L1 an einen Endpunkt von L2 anstößt, wird die Linie L1 aufgegeben und an L2 angehängt. Stoßen zwei Anfangspunkte oder Endpunkte aneinander, wird eine der beiden Linien umgekehrt und an die andere angehängt. Ziel ist es, möglichst nur eine Zahl pro zusammenhängender Liniengeometrie einzutragen.
- Die Linienverfolgung erlaubt es, Abschnitte zu suchen, die so gradlinig sind, dass man die Höhenzahl mit gerader Standlinie eintragen kann. Zudem steht für jeden dieser Abschnitte der Drehwinkel für die Anzeige fest, die Orientierung (Fuß Richtung Tal) wird aufgrund der benachbarten Höhen ermittelt und der Drehwinkel ggf. um 180° geändert. Die Abschnitte werden gesammelt und dahingehend analysiert, welcher die best lesbare Darstellung der Zahl erlaubt.
- Die Kacheln werden im Cache 8085 abgelegt. Die Berechnung einer Kachel dauert zwei bis vier Sekunden auf einem 11 Jahre alten Intel® CoreTM i5-2500K.
Eine Freistellung von Wegen und Gebäuden erfolgt nicht.
Wegen der Freistellung der Höhenzahlen muss der Layer der Höhenlinien vor dem Layer der Schummerung gezeichnet werden. Dazu ist die Konfiguration des Tile-Servers um das Attribut prio erweitert worden: Je höher die Zahl desto später wird gezeichnet. Die Basiskarte (OSM-BKG), hier ein Ausschnitt mit Gletscher und Grenzen, wird unabhängig davon immer zuerst gezeichnet.
Die Interpolation von Höhen
Nehmen wir einmal an, sie hätten einen Track in einem Programm digitalisiert, das Ihnen keine Höhen liefert, dann stehen Sie nach dem Einlesen der Daten vor einem Track mit lauter Nullhöhen. Diese Höhen kann GNavigia auf unterschiedliche Arten ermitteln:
- Interpolation der Höhen aus den Höhenlinien einer PostgreSQL-Datenbank.
- Download der gepackten HGT-Datei und Interpolation aus der Datei.
- Bereitstellung der gepackten HGT-Dateien mittels Anmeldung, Download und ggf. Vorverarbeitung und Interpolation aus den Dateien.
Die im folgenden beschriebene Vorgehensweise ist stets die gleiche, egal ob die Daten aus der Datenbank oder der Datei stammen. Der Benutzer muss beide Arten in gewissem Umfang konfigurieren. Für den praktischen Einsatz wird heute aber nur noch die Lösung «nach Bereitstellung» in Frage kommen.
Bevor Höhendaten übertragen werden können, muss ein Track ausgewählt werden, auf dessen Trackpunkte die Operationen angewendet werden sollen. Wählen Sie aus dem Menü der Applikation heraus Bearbeiten/Track/Höhen aus SRTM-Daten interpolieren/Alle aktiven Trackpunkte. Es erscheint ein Dialog, der die Differenzen tabellarisch darstellt und ein Abbrechen oder auch nur die Einschränkung auf bestimmte Werte ermöglicht.
Klicken auf die Spalte mit dem Kreuz ([X]) wechselt zwischen drei Zuständen:
- alle Punkte selektiert
- kein Punkt selektiert
- nur Punkte mit Nullhöhen selektiert, falls es einzelne Nullhöhen gibt.
Mithilfe der Schaltfläche Zentrieren kann man sich das nähere Umfeld eines Punktes genauer ansehen. Klickt man ein zweites Mal für denselben Punkt, wird die vorausgehende Darstellung angezeigt. Weiteres Klicken wandert im Stapel der Anzeige weiter zurück. (In Vorbereitung.)
Geschützte Höhen
Wird eine SRTM-Höhe von 0.0 angezeigt, dann liegt es daran, dass (in besonders flachen Gebieten kann das vorkommen) die nächste Höhenlinie zu weit vom Trackpunkt entfernt ist. Einen solchen Wert interpoliert man später über die bekannte Interpolationsfunktion für zu 0 gesetzte Höhen. Außerdem gibt es Abschnitte, z. B. Brücken, für die Sie die Höhen speziell interpolieren oder gleich von Hand setzen wollen. Solche Aktionen erzeugen sogenannte «geschützte Höhen». Belassen Sie es dabei, dass geschützte Höhen nicht überschrieben werden!
Korrektur und Ausgabe der Daten
SRTM-Höhen können um einen gewissen Betrag von den Erwartungen abweichen. Hierfür kann man die Höhen vor der Übertragung auf die Trackpunkte um einen gewissen, konstanten Wert korrigieren. Geben Sie den Korrekturwert in das Eingabefeld ein und betätigen Sie die Schaltfläche «Korrektur». Das Resultat ändert sich.
Die Schaltfläche «Als Datei speichern» erzeugt eine Datei mit allen berechneten und ggf. korrigierten Werten. Die Datei enthält keine Koordinaten.
SRTM-Höhen aus HGT-Dateien ermitteln
GNavigia konnte früher per HTTP-Request die HGT-Dateien V3 («no voids») abrufen und auswerten, die vom US Geodetic Survey damals noch ohne Registrierung bereitgestellte wurden. Eine restriktivere Politik hat dem ein Ende gemacht.
Sind die Dateien (noch) vorhanden, durch Downloads heruntergeladen oder aus EU-DEM Daten umgesetzt, können sie nach wie vor für die Interpolation von Höhen benutzt, aber auch zur Berechnung einer Schummerung verwendet werden.
Damit Höhendaten abgerufen werden, müssen Sie ein Verzeichnis angeben, einen sogenannten «Cache», in dem die Daten abgelegt sind!
Damit SRTM-Höhen verwendet werden, müssen Sie zwei Dinge tun:
- Sie müssen ein Verzeichnis angeben, in dem die HGT-Dateien abgelegt werden können, und
- sie müssen im Menü unter «Extras/Einstellungen» im Reiter «Höhen» angeben, dass SRTM-Höhen verfolgt werden sollen.
Die Konfiguration geschieht dazu im Environment (der Umgebung). Wie das geht und was Sie mindestens tun müssen, ist unter Systemtipps in epischer Breite beschrieben. Setzen Sie mindestens
GNAVIGIA_SRTM_CACHE=C:\Cache\SRTM
Sie müssen GNavigia neu starten, falls es geöffnet sein sollte. Danach berechnet das Programm Höhendaten. Durch den Cache können Sie aber auch eine Weile offline arbeiten, da die Daten, anders als die Kacheln, für alle Maßstäbe und Zoomstufen dieselben sind.Cache bei eigener Bereitstellung der SRTM-Daten
Sie dürfen den Cache auf gar keinen Fall begrenzen, da sonst Dateien «verschwinden» können.
Cache beim Download der SRTM-Daten
Standardmäßig wird das Programm einen Cache von unbegrenzter Größe anlegen. Für Deutschland komplett benötigen Sie etwa 250 MB. Wie Sie den Cache begrenzen können, finden Sie ebenfalls unter Systemtipps.
Der Cache ist schlau. Da sich SRTM-Daten nie wieder ändern werden bis sie durch bessere und vollständigere Daten ersetzt werden, können Sie der Cacheverwaltung mitteilen, dass Sie bestimmte Dateien niemals löschen soll. Dazu müssen Sie im Cacheverzeichnis die Datei «CacheSave.txt» anlegen und die Dateien, die nicht gelöscht werden sollen, eintragen. Dazu muss in jeder Zeile der Datei linksbündig genau ein Dateiname stehen. Sollen alle Dateien, die sich im Verzeichnis befinden, eingetragen werden, öffnen Sie eine «Eingabeaufforderung» mittels «cmd», wechseln in das Verzeichnis und tippen am Prompt ein:
C:\Cache\SRTM>dir /B >CacheSave.txt
Damit ist die Datei erstellt. Sie darf nur Dateien enthalten, die auf «hgt.zip» enden. Sie wird ausgewertet, wenn es um das Bereinigen des Caches geht. Die Datei hat Vorrang vor der Angabe der Größe des Caches. Wenn Sie für 1 GB Dateien angeben, wird der Cache im Laufe der Zeit auf 1 GB anwachsen. Da die Dateien komprimiert sind und unterschiedlich groß, gibt es keine Überschlagsformel für die Anzahl der Dateien.
Die HGT-Dateien werden über einen HTTP-Request synchron geladen. Nach 1-2 Sekunden sollte die Datei geladen und die Höhe bestimmt sein. Danach ist nicht nur die Datei im Cache, auch deren Daten werden im Programm in einem internen Cache verwaltet, der natürlich nur solange aktiv ist, wie das Programm läuft. Zugriffe darauf bewegen sich im Bereich von Millisekunden.
Den Pfad für den HTTP-Request entnimmt das Progamm einer Setzung in der Konfigurationsdatei GNavigiaDigitalElevation.xml, die im Verzeichnis der ausführbaren Dateien liegt. Die Setzungen sind eingetragen unter:
<SRTM.V3>
SRTM V2 wird nicht mehr unterstützt.
SRTM-Höhen aus Höhenlinien einer PostgreSQL Datenbank
Das Programm kann Höhendaten hinreichend exakt interpolieren, sofern die OSM-Datenbank hierzu mit SRTM-Daten gefüllt ist. Erste Tests haben gezeigt, dass sich damit Genauigkeiten um 20 m für die Höhe erzielen lassen. Das bereits zuvor erwähnte PDF-Dokument erläutert die Vorgehensweise zum Einspielen von NASA SRTM-Daten.
Die Seite GNavigia Clients ist u. a. dem ODBC-Anschluss von Datenbanken gewidmet, nur dass hier die Datenquelle (Data Source) postgres_srtm_v2 lauten muss. (Unter Windows 64-Bit müssen Sie für das Hinzufügen des ODBC-Treibers statt Systemsteuerung/Verwaltung/ODBC-Datenquellen als Administrator das Programm C:\Windows\SysWOW64\odbcad32.exe ausführen, um 32-Bit ODBC-Treiber hinzuzufügen.)
Digitalisieren von Punkten
Beim Digitalisieren von Punkten wird automatisch eine SRTM-Höhe interpoliert, wenn die Funktionalität zur Verfügung steht. Da für jede Höhe ein neuer Thread erzeugt wird, kann es auf langsamen Maschinen dazu kommen, dass die Höhenbestimmung nachläuft. Ein Versuch auf einem 3000+ Athlon mit schneller Klickfolge, 1100 Punkten und 180 km Tracklänge führte zu dem Ergebnis, dass im Maximum fast 800 Threads zusätzlich aktiv waren. Nach einer langen Phase konkurrierender Berechnungen liefen die Ergebnisse am Ende fast simultan ein, sodass man dann «die Höhen heranfliegen sah», zudem in einer etwas anderen Reihenfolge als die innerhalb des Tracks, zeitlich gesehen, nicht räumlich.
Interpolationsformel
Die Interpolation von Höhen basiert auf Datenbankfunktionen, die durchaus zu unerwarteten Resultaten führen können. Daher soll der verwendete Algorithmus näher erläutert werden, wobei rechte Winkel, wie in der Geodäsie üblich, mit doppelten Viertelkreisen markiert sind:
Eine Datenbankfunktion sucht die beiden Höhenlinien, für die, wenn man vom zu interpolierenden Punkt P das Lot auf diese fällt, die Länge des Lots minimal ist. Dazu wird in einem festen Umkreis um P gesucht und alle Lote werden der Länge nach aufsteigend sortiert. Die ersten beiden Ergebnisse liefern die nächsten Nachbarn des Punktes. Zwischen den Lotfußpunkten P1 und P2 wird gedanklich eine Linie aufgespannt und der Punkt P wird darauf aufgewinkelt. Im Lotfußpunkt wird die Höhe interpoliert und als die Höhe von P vermutet. Wenn die Höhenlinien ziemlich parallel und mit gleichen Abständen verlaufen, ist das auch der Fall.
Im skizzierten Beispiel liegen die beiden nächsten Linien aber so, dass der Punkt P zwischen P2 und P3 extrapoliert werden müsste. Dem trägt der Algorithmus Rechnung. P wird auf die Linie zwischen P2 und P3 aufgewinkelt, wodurch ein geringfügig anderes Ergebnis für die Höhe des Punktes auftritt, als erwartet. Allerdings sind weder die SRTM-Höhen noch mittel GPS ermittelte Vergleichswerte genauer als 10 Meter, sodass der Fehler gering ist gegen die zu erwartende Genauigkeit.