Zum Hauptinhalt springen

3D-Gebäudemodelle mit der 3D City Database und QGIS2threejs in QGIS visualisieren

· 8 Minuten Lesezeit
Fedora

Mastodon und der WebMontag Kiel sind cool. Die Gespräche nach meinem ersten Vortrag beim WebMontag setzte den Gedanken in meinen Kopf, die Arbeit mit Geodaten und Karten in die dritte Dimension zu überführen. Nach dem zweiten Vortrag (Blogposts 1 und 2 zu Fernerkundung) entstand ein langer Mastodon-Thread mit der ursprünglichen Idee, Flächenaufteilungen in Städten kenntlich zu machen.

Daraus entstand eine Projektidee, die das Ziel hat, ein 3D-Modell der Stadt Kiel mit der Aufteilung des Straßenraums in einem GIS - im besten Fall in einem WebGIS - zu haben, in welchem mensch Berechnungen zur Aufteilung des Straßenraums durchführen kann und in dem Änderungen eingebaut und visualisiert werden können. Ob dieses Projekt für mich umsetzbar ist, vermag ich an dieser Stelle noch nicht zu vorherzusagen, aber ich möchte dennoch mein Vorgehen, meine Ideen und die Probleme, auf die ich stoße, in zukünftigen Blogposts beschreiben. An dieser Stelle sei auch gesagt, dass ich gerne Ideen, Anregungen und Hilfe annehme.

Der erste Schritt ist in meinen Augen, die Gebäude in der Stadt in 3D darzustellen. Damit gewinnen wir bereits einen ersten räumlichen Eindruck des städtischen Raumes, außerdem liegen 3D-Gebäudemodelle vom Vermessungsamt als OpenData vor. Wie eine Visualisierung dieser 3D-Gebäudemodelle im open-source GIS QGIS gelingen kann, beschreibe ich in diesem Blogpost.

LoD-Daten in QGIS

Das Landesamt für Vermessung und Geoinformation Schleswig-Holstein stellt 3D-Gebäudemodelle in LoD1 und LoD2 (Level of Detail) als OpenData zur Verfügung. LoD1 bedeutet, dass die Gebäude als Blöcke oder Klötze mit Flachdach dargestellt werden. Die Höhe der Blöcke wird durch den höchsten Punkt des Gebäudes bestimmt. In LoD2 erhalten die Gebäudemodelle Standarddachformen. Ich möchte für die Visualisierung die Gebäude im LoD2 verwenden. Diese kann mensch im Downloadportal für offene Geobasisdaten herunterladen.

Die Gebäudemodelle liegen im CityGML-Dateiformat vor. Auch wenn QGIS GML lesen kann, zeigen sich in der Kartenansicht sofort die ersten Probleme: Es fehlen Gebäude. Bei der Ansicht der LoD1-Gebäude sind die Lücken gut zu erkennen:

Kartendarstellung in QGIS. Die magentafarbenen Polygone stellen Gebäude dar. Darunter ist eine Hintergrundkarte zu sehen.

Auch bei den LoD2-Gebäuden zeigen sich Lücken und sie werden von QGIS als Linien eingelesen:

Kartendarstellung in QGIS. Die lilafarbenen Linien stellen Gebäude dar. Darunter ist eine Hintergrundkarte zu sehen.

Zu den hier sichtbaren Problemen kam dann auch noch, dass QGIS das Höhen-Attribut entweder als Real oder als String ausgelesen hat. Angesichts dieser Probleme erscheint QGIS nicht als das Mittel der Wahl, mit 3D-Gebäudemodellen zu arbeiten. Dennoch habe ich erste Visualisierungen mit Gebäuden, Straßenraumaufteilung und Bäumen erstellt:

Zu sehen ist eine Visualisierung von Straßenzügen und Gebäuden. Die Gebäude sind graue Blöcke, die Straßen sind bunt, entsprechend der Aufteilung des Straßenraums. Blick auf die Straße Brauner Berg in Kiel.

Die Probleme zeigen, dass es einen Weg braucht, die 3D-Gebäudemodelle so einzulesen und zu speichern, dass QGIS diese vernünftig anzeigen und visualisieren kann. Zum Glück gibt es mit der 3D City Database eine Datenbank, die auf die Speicherung und Verwaltung von CityGML-Dateien ausgelegt ist.

3D City Database

Die 3D City Database (3DCityDB) ist eine Geodatenbank, die 3D-Städte- und Gebäudemodelle speichern, verwalten und repräsentieren kann. Sie ist dabei insbesondere auf das CityGML-Format, in dem die schleswig-holsteinischen LoD-Daten vorliegen, ausgelegt. Da die 3DCityDB vom Prinzip eine PostGIS-Datenbank mit Erweiterungen, die die Arbeit mit 3D-Modellen ermöglichen, ist, ist eine Verbindung mit QGIS einfach herzustellen. Die Installation und Einrichtung der 3DCityDB ist ausführlich dokumentiert. Ich habe die 3DCityDB mittels Docker installiert:

docker pull 3dcitydb/3dcitydb-pg:latest

docker run -d -p 5432:5432 --name 3dcitydatabase -e \
POSTGRES_PASSWORD=SuperGeheimesPasswort -e SRID=25832 \
-e POSTGRES_DB=SuperTollerDatenbankname \
-e POSTGRES_USER=SuperTollerUser -e POSTGIS_SFCGAL=true \
3dcitydb/3dcitydb-pg

Weitere mögliche Anpassungen des Docker-Containers, bspw. bessere Performace der PostGIS-Datenbank, sind dokumentiert. Sobald die 3DCityDB installiert und einsatzbereit ist, ist der wichtigste Punkt, eine Möglichkeit, 3D-Gebäudemodelle entsprechend ihrem Datenformat zu speichern, erledigt. Nun müssen die Gebäudemodelle ihren Weg in die Datenbank finden.

Importer für die 3D City Database

Wenn die Datenbank installiert und einsatzbereit ist, können CityGML-Dateien mittels eines Importers importiert werden. Für den Importer liegt ein grafisches Installationsprogramm vor. Der Importer muss nicht auf dem Server, wo die 3DCityDB installiert ist, installiert werden, sondern kann auf jedem Computer installiert werden, der eine Verbindung zur 3DCityDB herstellen soll.

Die Nutzung des Importers geht einfach von der Hand. Im Reiter Database muss mensch die Verbindungsdaten zur 3DCityDB eingeben und sich mit der Datenbank verbinden. Danach geht es unter dem Reiter Import weiter, wo mensch die zu importieren CityGML-Dateien auswählen und dann importieren muss. Auch die Installation und Nutzung des Importers ist ausführlich dokumentiert.

Damit sind die 3D-Gebäudemodelle in der Datenbank. Allerdings fehlt noch ein Workflow und ein Weg, die 3D-Gebäudemodelle vernünftig in QGIS einzulesen. Denn trotz Datenbank und Importer müssen Stand jetzt die Modelle wieder aus der Datenbank exportiert werden, um sie dann in QGIS einzufügen. Damit wären wir wieder am Anfang. Aber für die Zusammenarbeit zwischen der 3DCityDB und QGIS gibt es ein praktisches QGIS-Plugin.

3DCityDB-Tools

Im Pluginmanager von QGIS findet sich das Plugin 3DCityDB Tools. Mit diesem lassen sich die 3D-Gebäudemodelle, die sich in der 3DCityDB befinden, in QGIS anzeigen und bearbeiten. Es zeigt sich, dass die Gebäude nun vollständig in QGIS zu sehen sind. Es sind keine Gebäudelücken zu sehen und die Dachstrukturen lassen sich in der 2D-Kartenansicht schon erahnen:

Kartendarstellung in QGIS. Die roten Polygone mit den schwarzen Linien stellen Gebäude dar. Darunter ist eine Hintergrundkarte zu sehen.

Für die Einrichtung des 3DCityDB-Tools-Plugin existiert eine Schritt-für-Schritt-Anleitung. Diese ist über Database > 3DCityDB Tools > User Guide (PDF) aufzufinden. Wenn mensch weitere 3D-Gebäudemodelle hinzufügen möchte, müssen diese über den Importer in die 3DCityDB importiert werden. Danach muss im Layer Loader des Plugins auf Refresh layers und refresh extents geklickt werden.

Damit ist die Datenbank, in der die 3D-Gebäudemodelle gespeichert werden, und ein Workflow aus Importer und 3DCityDB-Tools, um die Gebäudemodelle in QGIS zu laden, einsatzbereit. Nun fehlt nur noch die Visualisierung der 3D-Gebäude.

QGIS2threejs

Für die Visualisierung der 3D-Gebäudemodelle nutze ich das QGIS-Plugin QGIS2threejs. QGIS hat zwar einen eigenen 3D-Viewer, hierfür muss mensch aber erst Styles in den Layer-Eigenschaften erstellen. In QGIS2threejs werden die Gebäudemodelle direkt mit ihren Dachformen angezeigt. Ich nutze das Plugin vorerst nur als Viewer. Es kann aber weitaus mehr, wie bspw. 3D-Daten im Webbrowser visualisieren.

Beim Öffnen von QGIS2threejs fällt auf, dass es links eine Layer-Ansicht gibt. In dieser wählt mensch die verschiedenen Bestandteile der Gebäudemodelle aus. In diesem Fall die Dächer und Wände der Gebäude und der Gebäudeteile. Mit einem Rechtsklick auf die jeweiligen Layer lassen sich die Eigenschaften öffnen, in denen mensch die Layer stylen kann, also bspw. rot für die Dächer.

Zu sehen ist ein Screenshot der in QGIS2threejs auswählbaren Layer

Zusätzlich habe ich in das QGIS-Projekt ein digitales Geländemodell mit einer Gitterweite von 200 Metern (DGM200) eingefügt. Es handelt sich dabei um das DGM vom Bundesamt für Kartographie und Geodäsie. Dieses habe ich für die Nutzung in QGIS mit der Bibliothek GDAL in eine tif-Datei umgewandelt:

 gdal_translate -a_srs EPSG:25832 dgm200_utm32s.xyz germanyDGM200.tif

Der Hintergrund ist, dass ich dann in QGIS2threejs beim Layer Straßenbestandsflächen in den Eigenschaften den Modus auf Relative to "germanyDGM200" layer einstellen konnte. Dadurch befinden sich die Straßenbestandsflächen im QGIS2threejs-Viewerauf der selben Höhe wie die Gebäude.

Damit ist alles bereit, 3D-Gebäudemodelle zu visualisieren. Angereichert mit Daten zur Aufteilung des Straßenraums und Bäumen aus OpenStreetMap ergeben sich ansehnliche Visualisierungen:

Zu sehen ist eine Visualisierung von Straßenzügen und Gebäuden. Die Gebäude haben graue Wände und rote Dächer, die Straßen sind bunt, entsprechend der Aufteilung des Straßenraums. Blick auf die Straße Brauner Berg in Kiel. Zu sehen ist eine Visualisierung von Straßenzügen und Gebäuden. Die Gebäude haben graue Wände und rote Dächer, die Straßen sind bunt, entsprechend der Aufteilung des Straßenraums. Blick auf die das Viertel am Exerzierplatz in Kiel.) Zu sehen ist eine Visualisierung von Straßenzügen und Gebäuden. Die Gebäude haben graue Wände und rote Dächer, die Straßen sind bunt, entsprechend der Aufteilung des Straßenraums. Blick auf das Viertel zwischen Westring, Kronshagener Weg und Hasseldieksdammer Weg in Kiel.

Nächste Schritte

Der logische nächste Schritt ist, das QGIS-Projekt mit weiteren Objekten zu füllen. Gebäude und Straßenraumaufteilungen sind schon vorhanden. Die Bäume in den Visualisierungen stammen aus OpenStreetMap. Hieraus lassen sich weitere Objekte entnehmen und den Visualisierungen hinzufügen.

Außerdem ist es denkbar, die Daten zu verändern und mit dem Ist-Zustand zu vergleichen. So ließe sich dann sehen, was für Auswirkungen es hätte, an einer Stelle Parkplatze zu entfernen und dafür Bäume zu pflanzen. Spannend wird es dann, das in einen Webviewer zu packen und den Menschen die Möglichkeit zu geben, veränderte städtische Umgebungen in 3D zu erkunden. Ich werde hier und vor allem auf Mastodon weiter dazu schreiben.