Swisstopo-Geodaten mit Blender visualisieren

Illustriert anhand des Erdrutsches im Misox-Tal  — 

Die besten Geodaten von Swisstopo waren früher teuer und schwer zu bekommen. Heute sind fast alle als Open Data verfügbar. Höhenmodelle und Orthobilder erleichtern es, in Blender realistische 3D-Modelle zu erstellen. Kombiniert mit schnellen Luftaufnahmen dokumentieren sie eindrücklich, wie Naturereignisse mit dem Terrain zusammenhängen, beispielsweise nach dem Erdrutsch im Misox-Tal.

3D Modell des Misox mit dem Bach Riale Molera durch den der Erdrutsch ging

Es folgt ein kurzer Abriss dazu, wie man die Daten erhält, bearbeitet und in Blender zu einem 3D-Modell zusammenfügt.

TL;DR

Der grobe Ablauf ist wie folgt:

  1. Geotiffs des Höhenmodells herunterladen
  2. Geotiffs in QGIS kombinieren
  3. Luftbilder von Swisstopo via WMS laden
  4. Luftbilder und Höhenmodell so exportieren, dass sie genau übereinander liegen
  5. Geodaten mit BlenderGIS in Blender importieren und übereinander legen

Rapid Mapping von Swisstopo

Rapid Mapping ist eine Dienstleistung von Swisstopo. Bei Naturereignissen wie Lawinen, Erdrutschen, Hochwassern, Waldbränden werden innert kurzer Zeit Luftaufnahmen der Situation gemacht und online als Open Data veröffentlicht. Zum ersten Mal war das 2017 nach dem Bergsturz in Bondo der Fall.

Ebenfalls dank einer Rapid-Mapping-Mission gab es schon am nächsten Tag georeferenzierte Luftbilder des Erdrutsches im Misox-Tal. Hier im Vergleich mit bestehen Luftbildern. Wie aber kommt man von da zu einer 3D-Visualisierung?

1. Geotiffs des Höhenmodells herunterladen

Als Erstes benötigt man Höhenmodell der Region. Es ist leider (noch?) nicht als WMS-Layer verfügbar. Die benötigten Tiles müssen also manuell heruntergeladen werden. Verfügbar sind Auflösungen von 2 Metern oder 0,5 Metern. Für eine ganze Landschaft sollte die 2-Meter-Auflösung reichen. Das Limit hängt eher davon ab, wie viele Subdivisions man in Blender machen möchte. Dazu aber später mehr.

Auf der Swisstopo-Webseite kann man die gewünschte Region auswählen und erhält eine Liste aller Geotiffs – ab einer gewissen Anzahl jedoch nur noch als CSV. Ein kurzes Python-Skript lädt die Dateien herunter.

import requests
import csv

# Read list of files from altitudes.csv
with open('altitudes.csv', 'r') as f:
    files = list(csv.reader(f))

# Loop through each file and download it
for file in files:
    url = file[0]
    name = str.split(url, '/')[-1]
    r = requests.get(url)
    with open(name, 'wb') as f:
        f.write(r.content)

2. Geotiffs in QGIS kombinieren

Die heruntergeladenen Geotiffs nun in QGIS zu einem großen Bild kombinieren. Dazu alle in QGIS ziehen und Raster -> Sonstiges -> Verschmelzen wählen. Dend den Output in eine – vermutlich sehr große – Datei speichern.

3. Luftbilder von Swisstopo via WMS laden

Luftbilder gibt es direkt vom Swisstopo-WMS. Hat man sich diesen in QGIS eingerichtet, finden sich sie sich unter dem Namen «SWISSIMAGE Zeitreise». Das sind die alten Bilder vor dem Naturereignis.

Auch die neuen Luftbilder der Rapid-Mapping-Mission sind via WMS verfügbar. Sie sind mit dem Präfix RM- versehen. Der Layer der Misox-Mission heisst zum Beispiel RM-FloodingGR-RGBa-20240622.

4.Luftbilder und Höhenmodell so exportieren, dass sie genau übereineinander liegen

Damit in Blender alles präzise übereinanderliegt, müssen alle drei Ebenen (Höhenmodell, alte und neue Luftbilder) in derselben Grösse und Auflösung exportiert werden.

Dazu einen neuen Vektor-Layer erzeugen und ein Rechteck mit der gewünschten Ausdehnung zeichnen. Nun jeden der drei Layer mit Rechtsklick Export -> Speichern als … als Geotiff exportieren.

Die «Ausdehung» kann nun jeweils aus dem Layer mit dem Rechteck gelesen werden. Wichtig ist zudem, dass die Auflösung bei allen drei Bildern dieselbe ist. Sie kann gut zum Beispiel beim 2-Meter-Höhenmodell auch auf 1 Meter eingestellt werden. QGIS interpoliert die Werte selber.



5. Geodaten mit BlenderGIS in Blender importieren und übereinander legen

In Blender bekommt man die drei Bilder am besten mit dem Plugin Blender GIS.

Nachdem das Pugin installiert ist, das Höhenmodell mit GIS -> Import -> Georeferenced raster importieren. Wichtig ist die Auswahl «DEM as displacement texture». Ausserdem sollte das richtige Georeferenzsystem definiert sein. Alle Daten von swisstopo kommen mit LV95-Koordinaten. LV95 lässt sich zwar standardmässig nicht auswählen, aber via «+»-Knopf hinzufügen.

Blender erzeugt so ein neues Plane, macht 6 Subdivisions und weist die Höhenkarte als Displacement-Texture zu. Für eine höhere Auflösung können zusätzliche Subdivisions hinzugefügt werden.

Das alte und das neue Luftbild müssen nicht als DEM sondern als «Basemap on new plane» importiert werden, ebenfalls mit LV95-Koordinaten. So erzeugt Blender zwei Planes mit den jeweiligen Bildern als Textur. Die Planes kann man danach wieder löschen und die Texturen der Höhenkarte zuweisen.

Um beide Texturen übereinander zu legen, muss man sie mit einem Mix-Shader kombinieren. Der Aufbau sieht so aus:

Nun das Ganze noch schön beleuchten und rendern. Fertig ist die 3D-Visualisierung des Erdrutsches im Misox-Tal, des Bergsturzes in Bondo oder eines sonstigen Ortes in der Schweiz.