Das Einebnen von Wasserflächen in Höhenmodellen
Bei der Verwendung von automatisch erfassten Höhendaten (insbesondere SRTM and ASTER GDEM) für die Geo-Visualisierung ergeben sich eine ganze Reihe von Problemen, welche man auch weitverbreitet in Landkarten beobachten kann. Die meisten davon entstehen durch Diskrepanzen zwischen den Höhendaten und den übrigen bei der Produktion verwendeten Datensätzen. Ich möchte hier darstellen, wie sich einige dieser Probleme lösen lassen.
Das Problem der Wasserflächen in Höhenmodellen
Wasserflächen haben von Natur aus eine spezielle Beziehung zur Topographie, welche man in einigen einfachen Regeln beschreiben kann:
- Wasserflächen ohne bedeutenden Wasserfluss (also vor allem Seen) weisen eine nahezu perfekt glatte und horizontale Oberfläche auf.
- Solche Wasserflächen sind immer vollständig von Land umgeben, dessen Höhenwerte mindestens so groß sind wie die der Wasserfläche - mit Ausnahme der Abfluss-Stellen.
- Fließendes Wasser fließt an jedem Punkt des Reliefs immer den steilsten Weg nach unten.
In der Realität weden sowohl die Wasserflächen als auch das Relief von den Kräften der Natur so verändert, dass diese Regeln eingehalten werden. Wenn Karten allerdings auf Basis von unabhängigen Datensätzen für das Relief und die Wasserflächen produziert werden, werden diese Regeln oft deutlich erkennbar nicht eingehalten, was zu sichtbaren Fehlern in der Karte führt. Ein paar Beispiele aus aktuellen Internet-Karten:
See in der Cycle Map | See in dianacht topo | See und Fluss in Google Maps |
See und Fluss in OpenTopoMap | See in Geofabik Topo | See in 4umaps |
Wie man sieht besteht das häufigste Problem darin, dass Höhenlinien die Seen schneiden (unter Verletzung der ersten Regel oben). Während andere Fehler fast immer mit Genauigkeitsproblemen zu tun haben, ist dieses spezielle Problem bei automatisch erfassten Höhendaten unvermeidbar. Ich werde hier ein Verfahren vorstellen, die Wasserflächen in den Höhendaten so einzuebnen, dass die Höhenlinien diese nicht mehr schneiden.
Einebnen der Wasserflächen
Grundsätzlich ist es erstmal sehr einfach, alle Punkte des Höhenmodells innerhab der Umrisse eines Sees auf dessen bekannten Höhenwert zu setzen. Dies würde jedoch oft die zweite oben genannte Regel verletzen und erzeugt daneben auch oft unnatürliche Steilabfälle an den Ufern des Seen. Für ein brauchbares Ergebnis muss die zweite Regel ebenfalls durch Veränderungen der Höhenwerte garantiert werden und man sollte die Veränderungen allmählich auslaufen lassen um unnatürliche Steilabfälle zu vermeiden. Das hierfür entwickelte Werkzeug findet sich auf github.
Eine weiter Anwendung für dieses Verfahren neben der Produktion besserer 2D-Landkarten und eigentlich die primäre Motivation für die Entwicklung liegt in der ausdrücklichen Darstellung von Wasserflächen in 3D-Ansichten. Ich werde deshalb die Ergebnisse hier anhand von 3D-Bildern der Gegend um den Genfer See vorstellen. Die Wasserflächen-Daten basieren auf Openstreetmap.
Ursprüngliches Höhenmodell ohne Einebnung
Höhenmodell mit eingeebneten Wasserflächen
Mit Darstellung der Wasserflächen
Detail-Ausschnitt
Das Werkzeug zur Einebnung erzeugt auch ein POV-Ray mesh für die Wasseroberflächen. Dies sind jedoch sehr große Dateien, oftmals größer als das eigentliche Höhenmodell und bei der praktischen Verwendung gibt es auch Genauigkeits-Probleme. Für die Darstellung von flachen Szenen, also ohne korrekte Darstellung der Erdkrümmung, ist ein einfaches Polygon auf Basis der Originaldaten vermutlich die bessere Lösung.
Hier ein Beipiel aus der selben Gegend unter Verwendung des modifizierten Höhenmodells und der Wasserflächen-Meshes als 3D-Ansicht mit korrekten Relexionen auf den Wasserflächen.
Und die selbe Perspektive mit nur den Seen:
Zum Abschluss noch ein Beispiel von Höhenlinien-Darstellungen auf Basis des modifizierten Höhenmodells (erzeugt mit Hilfe von gdal_contour):
Die Höhenlinien können hierbei immernoch die Wasserflächen schneiden, bedingt durch die begrenzte Auflösung des Höhenmodells. Um dies sicher zu vermeiden müsste man die Wasserflächen anpassen. In Kombination mit Schattierung und Beschriftung der Höhenliniens sieht das dann so aus (der Link auf dem Bild führt zum selben Ausschnitt in der OpenCycleMap):
Ein Beispiel-Datensatz der Gegend um den Genfer See ist zum Download verfügbar. Die Datengrundlage hierfür ist eine Kombination von SRTM und ASTER GDEM-Daten und ist nicht für die Höhenlinien-Berechnung optimiert.
Konsistenzüberprüfung als Nebenprodukt
Beim Ändern der Höhendaten auf Grundlage der Wasserflächen-Geometrien wird natürlich angenommen, dass die Wasserflächendaten korrekt sind, die Höhendaten jedoch nicht. In Wirklichkeit sind jedoch beide Datensätze von begrenzter Genauigkeit. Bei den Höhendaten ist die Größe der auftetenden Fehler sogar meist wesentlich genauer bekannt als bei den Wasserflächen. Die bei der Einebnung der Wasserflächen notwendige Höhenänderung im Höhenmodell stellt also auch eine Anhaltspunkt für mögliche Fehler in den Wasserflächen-Daten dar. Mein Werkzeug produziert deshalb zusätzlich eine Liste der Punkte, an denen die Höhenunterschiede einen gewissen Schwellenwert überschreiten. Die Ergebnisse dieser Überprüfung kann man für Teile Europas auf dieser Karte sehen.
Und die Flüsse?
Es könnte aufgefallen sein, dass ich noch kein Wort über die dritte Regel in der Liste oben verloren habe. Bei den Seen wissen wir, dass diese eine konstante Höhe aufweisen, was den ganzen Prozess stark vereinfacht. Bei den Flüssen ist das Höhenprofil jedoch nicht bekannt. Ohne ein konsistentes Fluss-Netzwerk mit überall bekannter Flussrichtung ist die durchgehend konsistente Berücksichtigung der Flüsse sehr schwierig. Ich habe bereits anderswo über das Problem geschrieben, solche Informationen auf Basis der Openstreetmap-Daten zu erzeugen.
Christoph Hormann, September 2013
Kommentare:
noch keine Kommentare.
Durch das Abschicken Ihres Kommentars stimmen Sie der Datenschutzrichtlinie zu und erlauben, dass die eingegebenen Informationen (mit Ausnahme der eMail-Adresse) in diesem Blog veröffentlicht werden.