Web-basierte Visualisierung von 3D-Stadtmodellen Teil 2
Teil 2: Konvertierung von CityGML nach 3D Tiles
Im ersten Teil des Blogs wurde gezeigt, wie ein 3D-Stadtmodell im digitialen Globus Cesium visualisiert werden kann. Woher aber kommt der dazu benötigte 3D Tiles Szenengraph?

Visualisierung 3D-Gebäudemodell Wermelskirchen. Datenquelle: GeoBasis NRW, 3D-Gebäudemodell LoD2, CC BY 3.0 DE
Ein 3D-Gebäudemodell LoD 2 steht als CityGML Datensatz von Wermelskirchen über das Open Data Portal NRW zur Verfügung und kann hier heruntergeladen werden. Für die Erstellung eines 3D Tiles Szenengraphen muss man den CityGML Datenbestand konvertieren. Dazu benötigt man eine Software, die das kann. Hier gibt es genug Auswahlmöglichkeiten:
- FME untertsützt 3D Tiles seit der Version FME 2017.
- Firmen wie virtualcitySYSTEMS aber auch Cesium bieten die Konvertierung von CityGML nach 3D Tiles als Service an bzw. ein solcher Konverter ist Teil der Produktpalette
- Die GeoRocket Geodatenbank mit der ergänzenden GeoToolbox des Fraunhofer IGD beinhaltet einen CityGML nach 3D Tiles Konverter
Leider gibt es derzeit keine freie Software zum Download, mit der CityGML nach 3D Tiles konvertieren kann. In diesem Beispiel wird die GeoToolbox des Fraunhofer IGD verwendet.
Das CityGML Modell Wermelskirchen besteht aus zahlreichen einzelnen Dateien. Diese Dateien werden zunächst zu einer großen Datei wermelskirchen.gml
zusammengefasst. Dies kann z.B. dadurch erfolgen, dass die einzelnen Datei in die 3D CityDB oder GeoRocket Datenbank importiert und dann das gesamte Gebiet in eine CityGML Datei exportiert wird.
Mit der Anweisung
geo-toolbox-3dtiles --in ".\in\wermelskirchen.gml" --out .\out\ --srsInCode 25832 --strategy quadTree --doubleSided true
wird das CityGML-Modell nach 3D Tiles konvertiert. Als Strategie für die Kachelung wird eine Quadtree-Struktur verwendet. Der EPSG code des Eingangsdatensatzes wird mit dem Parameter srsInCode
festgelegt. Der Parameter doubleSided
legt fest, ob ein Polygon von beiden Seiten (true) oder nur aus der Richtung entgegengesetzt der Flächennormale (false), also von außen sichtbar ist. Mit der Festlegung doubleSided true
sind fehlerhaft orientiert Flächen nicht mehr sichtbar. Eventuelle Fehler in der Geometrie bleiben, aber man sieht sie halt nicht mehr.
Das Ergebnis ist die im ersten Teil des Blog beschriebene Dateistruktur von 3D Tiles. Diese muss noch auf einem Web-Server bereit gestellt werden, und fertig ist das 3D Modell im Web-Browser. Wenn man genau hinschaut, ist leider noch etwas zu tun. Wermelskirchen ist abgehoben und schwebt über dem Globus. Das liegt daran, dass der Globus kein Geländemodell verwendet, die Bodenhöhe ist immer null. Die Gebäudegeometrie verwendet aber die Höhe über NN. Daher stehen die Gebäude in der Luft.

Wermelskirchen schwebt über dem Globus. Datenquelle: GeoBasis NRW, 3D-Gebäudemodell LoD2, CC BY 3.0 DE
Was kann man tun, um die schwebenden Gebäude zu vermeiden? Entweder werden die Gebäudegrundrisse auf die Höhe z=0 verschoben oder es wird ein Geländemodell verwendet.
Um die Gebäude auf den Globus zu bringen, wird die Höhe des Grundrisspolygons ein Gebäudes von allen Koordinaten der jeweiligen Gebäudegeometrie subtrahiert. Der Grundriss ist dann bei z=0, ansonsten bleibt die Gebäudegeometrie gleich. Hierzu kann man die Softwarelösung clamp2ground
von Athanasios Koukofikis, HFT Stuttgart, verwenden. Dazu muss das clamp2ground Archiv entpackt werden. Die CityGML-Datei wird in den Ordner clamp2ground\in\
kopiert. Danach wird die clamp2ground
Software mit der gleichnamigen .bat bzw .sh Datei gestartet. Als Ergebnis liegt dann die transformierte CityGML-Datei im Ordner clamp2ground\out\
. Wird die Ergebnisdatei nun wie ober beschrieben nach 3D Tiles konvertiert, liegen die Gebäude auf dem Globus.

Wermelskirchen auf den Cesium Globus projiziert. Datenquelle: GeoBasis NRW, 3D-Gebäudemodell LoD2, CC BY 3.0 DE
Alternativ kann auch ein Geländemodell in den Cesium Globus eingebunden werden. Hierzu muss das JavaScript in der Datei Wermelskirchen.html
(siehe ersten Teil des Blogs) erweitert werden. Mit der folgenden Anweisung wird Cesium mitgeteilt, dass ein 3D-Geländemodell für die Darstellung verwendet werden soll. Das Geländemodell wird standardmäßig vom Cesium World Terrain Server bereitgestellt.
// terrain var terrainProvider = new Cesium.createWorldTerrain({ requestWaterMask : true, // required for water effects requestVertexNormals : true // required for terrain lighting }); viewer.terrainProvider = terrainProvider; viewer.scene.globe.enableLighting = true; // set lighting to true |
Leider passen Gebäude und Gelände nicht perfekt zusammen, was vermutlich an der Auflösung des Geländemodells liegt. Es können auch andere Geländemodelle eingebunden werden, wie im Cesium Tutorial beschrieben. Die Nutzung des Geländemodells, das von GeoBasis NRW als Open Data bereitgestellt wird, ist dazu eine schöne Übungsaufgabe. Viel Erfolg dabei.

Wermelskirchen Gebäudemodell mit Geländemodell, Datenquelle: Geländemodell: Cesium World Terrain, Gebäudemodell GeoBasis NRW, 3D-Gebäudemodell LoD2, CC BY 3.0 DE
Verwendete Software im Überblick
- CesiumJS v1.45
- Webserver: Apache HTTP Server, ist auch im XAMPP enthalten
- Editor: Notepad++ mit JSON Plugin JSToolNpp
- Web-Browser: Firefox v56.0
- clamp2ground, Athanasios Koukofikis, HFT Stuttgart
- geotoolbox CityGML nach 3D Tiles Konverter: leider nicht zum download verfügbar, bitte an Ralf Gutbell, Fraunhofer IGD wenden.
Weiterführende Arbeiten
- Coors, V. (Ed.): OGC Testbed 13 – 3D Tiles and I3S Interoperability and Performance Engineering Report, 5.3.2018, http://docs.opengeospatial.org/per/17-046.html, PDF
- Hagedorn, B., Thum, S. Reitz, T., Coors, V., and Gutbell, P. (Eds.): OGC 3D Portrayal Service 1.0, 13.9.2017, http://docs.opengeospatial.org/is/15-001r4/15-001r4.html
Copyright
Die im Blog bereitgestellten Texte und Bilder stehen unter der Lizenz CC BY 3.0 DE.