text: 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:
  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.
  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.
  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
  geotoolbox CityGML nach 3D Tiles Konverter: leider nicht zum download verfügbar, bitte an Ralf Gutbell, Fraunhofer IGD wenden.
  In diesem Artikel soll eine kurze Einführung in die web-basierte 3D-Visualisierung von 3D-Stadtmodellen gegeben werden. Hierzu wird anhand eines Beispiel die Erstellung einer 3D-Visualisierung von Wermelskirchen mit dem digitalen Globus Cesium erstellt. Warum Wermelskirchen und nicht New York? Auch das 3D-Gebäudemodell von Wermelskirchen ist frei verfügbar, und es ist etwas überschaubarer als New York. Nach dem Motto „Think Big, start small“ wird hier ein Workflow schrittweise vorgestellt, der aufzeigt, wie man ausgehend von einem 3D-Gebäudemodell in CityGML eine Visualisierung in Cesium erstellt. Dazu wird der CityGML Datenbestand in das für die web-basierte 3D-Visualisierung optimierte Datenformat 3D Tiles konvertiert und in Cesium dargestellt. Im ersten Schritt soll gezeigt werden, wie die Visualisierung in Cesium erfolgt. Dazu wird davon ausgegangen, dass das 3D-Gebäudemodell von Wermelskirchen bereits als 3D Tiles vorliegt. Dann sieht man schon einmal was. Im zweiten Schritt wird dann die Konvertierung von CityGML nach 3D Tiles erläutert.
  Der digitale Globus Cesium kann von der Webseite https://cesiumjs.org/downloads/ heruntergeladen werden. Er sollte auf einen eigenen Web-Server betrieben werden. In Grunde gibt es keine Einschränkungen, welcher Webserver verwendet wird. In der Installationsanleitung von Cesium (https://cesiumjs.org/tutorials/cesium-up-and-running/) wird Node.js verwendet. In dem hier gezeigten Beispiel wird Apache HTTP Server als Webserver verwendet. Egal, welcher Webserver zum Einsatz kommt, nach erfolgreicher Installation sollte der digitale Globus mit dem üblichen „Hello World“ zu sehen sein.
  Bei 3D Tiles handelt es sich um einen hierarchisch aufgebauten Szenengraph, bei dem ein großes 3D-Modell in Kacheln unterteilt wird, um eine schnelle Darstellung im Web-Browser zu realisieren. Ziel ist es dabei, so schnell wie möglich ein erstes vereinfachtes Modell an den Web-Browser zu übertragen und darzustellen. Die Szene wird bei Benutzerinteraktionen wie heranzoomen durch das Nachladen weiterer Kacheln detaillierter dargestellt. Zur Erstellung der Kacheln bietet sich bei 3D-Gebäudemodellen eine Quadtree Datenstuktur an. Dabei wird ein Gebiet regelmäßig in 4 Quadranten unterteilt, die entsprechend der Himmelrichtungen NE, SE, SW und NW genannt werden.
  Jeder Quadrat wird nach dem gleichen Muster weiter unterteilt. So entsteht eine hierarchische Kachel-Struktur, die sich auch in den Dateien der 3D-Szene wiederfindet.
  Ein entsprechend generierter Datensatz von Wermelskirchen wird im Archiv Wermelskirchen3DTiles zur Verfügung gestellt. Wie dieser Datensatz aus dem CityGML-Modell entstanden ist, wird im zweiten Teil dieses Beispiels erläutert. Zunächst geht es darum, die Struktur zu verstehen und im Cesium-Viewer zu visualisieren.
  Im Ordner Wermelskirchen3DTiles befindet sich eine Datei tileset.json. Hier ist der gesamte Szenengraph enthalten, anhand dessen der Cesium Viewer entscheidet, welche Daten wann übertragen und auf dem Bildschirm dargestellt werden. Die Datei kann in einem normalen Editor wie Notepad++ angeschaut werden. Da es sich um eine JSON Datei handelt, empfiehlt sich auch die Nutzung eines JSON Plugins für Notepad++ wie JSToolNpp.
  Die Datei tileset.json enthält den Szenengraph, der vom Cesium Viewer verwendet wird. (CC BY 3.0 DE)
  Der Aufbau der JSON Datei entspricht der Quadtree-Struktur. Zu jedem Quadranten werden u.a. die Koordinaten des Hüllvolumens (boundingVolume), die Darstellungsgeometrie der Kachel (content) und der max. Fehler im Vergleich zur originalen Gebäudegeometrie (geometryError) definiert. Die eigentliche Darstellungsgeometrie wird in einer externen Datei in dem binären Format b3dm gespeichert. Die Geometrie wird dabei immer als Dreiecksnetz gespeichert. Zusätzlich können Texturen und Attributdaten hinterlegt werden. Diese Dateien finden sich in der Ordnerstruktur entsprechend der Quadtree-Struktur wieder, z.B. unter ./b3dms/R/NE.b3dm und ./b3dms/R/NE/NE.b3dm. Für jede Kachel wird ein vereinfachtes 3D-Modell gespeichert. Die originale Gebäudegeometrie findet sich in den Blättern des Szenengraphen, also bei Kacheln, die nicht weiter unterteilt werden. Anhand des Geometriefehlers in der Kachel (geometryError) und des Blickpunktes (Kamera), von dem aus die Szene betrachtet wird, entscheidet der Cesium Viewer, welche Kacheln geladen und dargestellt werden.
  Um die 3D Tiles in Cesium darzustellen, müssen die Dateien auf den Webserver kopiert werden, z.B. bei Apache in das Verzeichnis htdocs. Zusätzlich muss eine HTML-Datei erstellt werden, in der das Modell mit dem Cesium-Viewer verknüpft wird. Hierzu kann man am einfachsten die o.g. HelloWorld.html-Datei von Cesium kopieren und um folgendes JavaScript ergänzen.
  In der ersten Zeile wird der Cesium Viewer instanziiert. Mit der Anweisung viewer.scene.primitives.add wird das Tileset zum Globus hinzugefügt. In dieser Datei stehen alle notwendigen Informationen, um in Abhängigkeit des Kamerastandpunktes zu entscheiden, welche Kachel geladen und im Globus angezeigt werden muss. Die folgenden Anweisungen definieren die initiale Position und Orientierung der Kamera, damit beim Laden der Webseite bereits 3D-Gebäudemodelle zu sehen sind.
  Das Ergebnis wird in der Datei Wermelskirchen.html gespeichert. Der erste Blick auf Wermelskirchen ist in folgender Abbildung dargestellt.