Technisches zu den Visualisierungen der Tagesbevölkerung

06.07.2010 - Mitteilung

Zurück zu Mitteilungen

Für die Bevölkerungs-Visualisierungen haben wir neben GIS-Produkten und Java-Eigenentwicklungen diverse weitere Softwareprodukte im 3D-Bereich eingesetzt: StructureSynth zur Generierung der 3D-Strukturen, Sunflow fürs Rendering und JavaView für die interaktive 3D-Visualisierung.

Um eine gute graphische Qualität bei der Darstellung der Bevölkerungsverteilung als 3D-Modelle zu erzielen, haben wir bei der Visualisierung von Tag- und Nachbevölkerung (vgl. Tagesbevölkerung im Kanton Zürich) zum Teil etwas speziellere und aufwändigere Verfahren angewendet. Die einzelnen Schritte für die Erstellung der fotorealistischen Darstellungen und die Verwendung der Daten in einem Applet (JavaView), das eine interaktive Auseinandersetzung mit einem 3D-Modell erlaubt, sollen im Folgenden kurz erläutert werden. Die Erarbeitung der eigentlichen Bevölkerungsdaten wird hier nicht behandelt.

1. Ausgangsdaten

Ausgangsdatei, welche aus dem geographischen Informationssystem ArcGIS zum Zwecke der Visualisierungen extrahiert wurde, war eine simple Textdatei:

Struktur

XYTagbevNachtbev
67425023825024.6534.02
67425023850027.4937.23
67425023875023.2030.74
6742502422509.6313.32
6742502425009.6615.10

Für jeden Zellenmittelpunkt im Untersuchungsgebiet wurde die Anzahl Personen («Tagbev» bzw. «Nachtbev») ausgewiesen. Die Nachkommastellen machen deutlich, dass die Bevölkerungszahlen mittels Modellen erarbeitet wurden. Zellen ausserhalb des Kantons wurden weggelassen, Zellen in den Seen wurden speziell codiert.

2. Die Erstellung fotorealistischer Ansichten

Mittels eines einfachen Java-Programms wurden diese Zellen in eine Form gebracht, die von Structure Synth verstanden wird. Structure Synth ist eigentlich ein Programm, mit dem sich generativ 3D-Objekte erzeugen und darstellen lassen (eine Vielzahl von Beispielen findet sich bei Flickr). Gesteuert wird es mit der einfachen Scriptsprache EisenScript. Wir verwenden hier aber keines der generativen bzw. iterativen Sprachelemente, sondern wir erzeugen die darzustellenden Primitive («box») gleich direkt:

set maxobjects 200000
set background #444444
{Color #999999 x -15.170 y 15.170 z 0.000 s 0.341 0.341 0.001} box
{Color #999999 x -14.830 y 15.170 z 0.000 s 0.341 0.341 0.001} box
...
{Color #ffecec x 12.443 y 6.989 z 1.368 s 0.307 0.307 2.735} box
{Color #f2f2ff x 12.784 y 6.989 z 1.259 s 0.307 0.307 2.517} box
{Color #c3c3ff x 13.125 y 6.989 z 1.047 s 0.307 0.307 2.094} box

In diesem Schritt werden den einzelnen Säulen gleichzeitig auch noch Farben zugeordnet (z.B. aufgrund des Verhältnisses Tag- zu Nachtbevölkerung; Format: hexadezimale RGB-Werte). Die übrigen Angaben definieren die Position (x/y/z) und die Grösse bzw. Skalierung (s) der Säulen. Dabei werden die ursprünglichen Landeskoordinaten (in ein Gebiet rund um den Koordinatenursprung transformiert und etwa auf einen Bereich von -15 bis +15 skaliert, was die anschliessende Bearbeitung erleichtert. Fehlende Gebiete ausserhalb des Kantons werden mit grauen Mini-Säulen ergänzt.

Structure Synth erlaubt es nun, das generierte 3D-Gebilde interaktiv zu inspizieren, zu drehen und dadurch einen geeigneten Blickwinkel festzulegen:

Das eigentliche Rendering des Modells erfolgt in unserem Fall im Programm Sunflow, welches fotorealistische Bilder erzeugen kann. Dazu wird die aktuelle Ansicht (samt Betrachtungsort, Blickwinkel und Beleuchtung) aus Structure Synth nach Sunflow exportiert, wo anschliessend direkt der zeitintensive Prozess des Renderns erfolgt (Rechenzeiten je nach Gerät im Bereich von Minuten bis Stunden):

Das resultierende Bild wird dann in einem üblichen Grafikformat (z.B. png) exportiert und dann in die entsprechende Web-Seite integriert.

3. Visualisierung als drehbares Objekt in einem Java-Applet

Für die Präsentation der 3D-Bevökerungsoberfläche haben wir mit JavaView ein geeignetes Applet gefunden. Analog zum obigen Vorgehen wurden die Ausgangsdaten in ein Format umgewandelt, das durch JavaView eingelesen werden kann. Wir haben uns für das dortige Default-Format JVX entschieden, bei dem die Oberfläche in einem XML-Format definiert wird. Dazu werden zunächst Punkte (<points>-tag) ausgeschrieben, mit Hilfe derer dann kleine Flächen (<faces>-tag) definiert werden können. Diese erhalten dann wiederum noch Farben (<colors>-tag) zugeordnet. Ein kleiner Ausschnitt aus der JVX -Datei:

<points num="7921">
<p>-2.225 2.225 2.199</p>
<p>-2.175 2.225 2.199</p>
...
<p>2.125 -2.175 2.199</p>
<p>2.175 -2.175 2.199</p>
</points>

...

<faces num="7921">
<f>90 91 180 179</f>
<f>91 92 181 180</f>
...
<f>7739 7740 7829 7828</f>
<f>7740 7741 7830 7829</f>
</faces>

...

<colors type="rgb" num="7921">
<c>255 247 247</c>
<c>255 247 247</c>
...
<c>255 247 247</c>
<c>255 248 248</c>
</colors>
...

In einem entsprechenden Applet-Tag auf einer Web-Seite wird diese Datei dann eingebettet und kann dann mit einem Browser betrachtet werden:

Durch ein Rechtsklicken im Applet werden die verschiedenen geometrischen Operationen angesteuert, über die Option «Kontrollfenster» wird eine Vielzahl von weiteren Optionen ansteuerbar, die eine Anpassung der Darstellung (zusätzliche Linien, geometrische Operationen) erlauben. Hier schliesslich noch das integrierte Kontrollfenster:

Zurück zu Mitteilungen