Vom DEM zum 16bit-PNG
Die erste Hürde ist schon mal geschafft: Im GDAL-Ordner liegt jetzt ein GeoTiff mit UTM-Projektion und einer Auflösung von 16m. Bevor die DEM-Daten jedoch in ein 16bit-PNG verwandelt werden kann, müssen die Daten zunächst auf eine SC4-kompatible Größe zugeschnitten werden, die freilich nicht vollkommen beliebig ist.
Die kleinste Region, die sich für SC4 erstellen lässt, hat die Größe einer kleinen Stadtkarte, alle anderen Regionsgrößen leiten sich daher von dieser Fläche ab. Wie eingangs bereits erwähnt besteht die kleine Stadtkarte aus 64 x 64 Feldern. Weiterhin kann man im vierten und fünften Bild des letzten Abschnitts erkennen, dass diese Felder zwischen den einzelnen Stützpunkten des Höhenmodells aufgespannt sind. Daher benötigt man für eine Region mit 64x64 Feldern auch ein Höhenmodell mit 65 x 65 Stützpunkten. Zugegeben, das hört sich etwas kompliziert an, deshalb habe ich eine kleine Datei angehängt, aus der sich alle möglichen Regionsgrößen bis einschließlich 32km x 32km in Kilometern-Abständen (genauer gesagt 1024m) und die entsprechende Größe des Höhenmodells in Pixeln ablesen lassen (keine Sorge, die habe ich nicht per Hand geschrieben...

)
Um das modifizierte Höhenmodell nun zu zuschneiden, muss wieder mit GDAL gearbeitet werden, allerdings benötigt das Programm die Information, welcher Teil des DEMs eigentlich ausgeschnitten werden soll. Um diese Information zu erhalten, erstellt man sich zunächst am besten eine Abbildung der DEM-Daten im JPEG-Format:
Nachdem man die modifizierten DEM-Daten (genf_UTM_16.tif) mit
3DEM geöffnet hat, klickt man auf
Operation->F6 Resize Overhead View
woraufhin sich ein kleines Fenster mit einem Schieberegler öffnet, den man so positionieren muss, dass bei Map Scale der Wert 1.00 erscheint, danach auf OK klicken.
Das Höhenmodell erscheint jetzt in voller Größe im Ausgabefenster und lässt sich über
File->Save Map Image
als normale Bilddatei speichern. Der Größe wegen sollte man JPEG wählen, der Speicherort ist diesmal egal, nur wiederfinden sollte man ihn...
Anschließend öffnet man diese Datei mit dem Bildbearbeitungsprogramm seiner Wahl, ich verwende im Folgenden
IrfanView. Mit dem Auswahlwerkzeug erstellt man nun ein Rechteck, dass annäherungsweise die Größe der zukünftigen Region repräsentiert (siehe angehängte Liste; die Größe auf den Pixel genau festzulegen ist nicht immer möglich, aber auch nicht unbedingt notwendig). So sieht das bei mir aus:
Die Informationen mit denen wir GDAL füttern müssen, liefert uns IrfanView in der Programmleiste am oberen Bildrand: Die beiden Zahlen hinter „Selection“ sind die X-Y-Koordinaten der linken oberen Ecke des Auswahlrechtecks, dahinter folgt die Größe der Auswahl. In meinem Fall liege ich mit zwei Pixeln knapp neben der gewünschten Größe von 1537 x 1537, d.h. meine Region wird etwa 24 x 24 km groß sein und 36 große Stadtkarten umfassen.
Also dann: Eine Windows-Shell öffnen, in das Verzeichnis der GDAL-.exe-Dateien wechseln, die Struktur des benötigten Befehls sieht folgendermaßen aus:
>>>gdal_translate -srcwin X-Offset Y-Offset X-Size Y-Size quelldatei.tif zieldatei.tif
Mit dem Flag -srcwin wird offensichtlich die Position und Größe des gewünschten Ausschnitts festgelegt, in meinem Beispiel gebe ich also ein:
>>>gdal_translate -srcwin 1182 1505 1537 1537 genf_UTM_16.tif genf_UTM_final.tif
Nach dem Drücken von RETURN-Taste, sieht es hoffentlich ungefähr so aus:
Halleluja, das Höhenmodell liegt nun endlich mit der richtigen Projektion, Auflösung und Größe vor und ist bereit sich in ein 16bit-PNG zu verwandeln! Das einzige was jetzt noch zu beachten ist, ist die korrekte Umwandlung der Höhendaten in PNG-Werte.
Dafür bringt man mit dem Befehl
gdalinfo zunächst in Erfahrung, auf welcher Höhe der niedrigste bzw. höchste Punkt des Datensatzes liegt:
>>> gdalinfo -mm genf_UTM_final.tif
Der niedrigste Punkt (das ist bei mir die Oberfläche des Genfer Sees) liegt also bei 360,51m, der Höchste bei 1474,41m.
Zu beachten ist nun, dass des Meeresspiegel in SC4 nicht bei 0m, sondern bei 250m liegt, d.h. auch im PNG sollte der niedrigste Punkt bei 250m liegen. Damit aber sich die Höhendaten auf der Z-Achse nicht verzerren, muss die Höhendifferenz von 110,51m (360,51m - 250m = 110,51m) auch vom höchsten Punkt abgezogen werden, so dass man auf 1363,9m (1474,41m -110,51m = 1363,9m) kommt.
Mit diesen Daten kann man sich nun an die Erstellung des 16bit-PNGs machen. Benötigt wird dazu erneut der Befehl
gdal_translate mit folgender Struktur:
>>>gdal_translate -ot UInt16 -of PNG -scale QuellMin QuellMax ZielMin ZielMax Quelldatei.tif Zieldatei.png
Der Flag -ot UInt16 sorgt für eine Ausgabe in 16 Bit, mit dem Flag -of PNG sorgt man freilich für das PNG-Format.
Spannend wird's beim Flag -scale, denn hier muss man beachten, dass der zulässige Wertebereich bei einem 16bit-PNG zwischen 0 und 65535 liegt, so dass man die ermittelten Werte mit 10 multiplizieren muss!
Mein Befehl sieht daher so aus:
>>>gdal_translate -ot UInt16 -of PNG -scale 360.51 1474.41 2500 13639 genf_UTM_final.tif genf_UTM_final.png
Et voilà, fertig ist das akkurat skalierte 16bit-PNG!
