TIFF-Daten-Grids zusammenfassen und für cardo aufbereiten (GDAL)

Ausgangslage ist ein Ordner mit vielen einzelnen Tiff-Dateien. Sollte es nur eine Ausgangs-Tiff-Datei geben, kann Schritt 1 dennoch ausgeführt werden oder bei Schritt 2 gestartet werden. Als Quell-Datei ist dann nicht die VRT-Datei anzugeben, sondern die Ausgangs-Tiff-Datei.

Der Weg führt über folgende Schritte:

  1. Erzeugung einer Hilfsdatei, die alle einzelnen Dateien als "virtuelle Rasterdatei" (VRT) repräsentiert. Im Zuge der Erstellung dieser Datei werden die Positionen aller Einzeldateien ermittelt und passend in ein Mosaik eingeordnet sowie weitere Metadaten gesammelt bzw. vorgegeben.

  2. Erzeugung der Tiff-Datei auf Basis der zuvor erstellten VRT-Datei.

  3. Erzeugung einer begleitenden Statistik-Datei (.aux.xml), damit die Min-/Max-Werte in der Datei ermittelt und zur weiteren Verwendung durch die nutzenden Programme abgelegt werden.

  4. Erzeugung einer Übersichts-Pyramiden-Datei (OVR), zur deutlichen Steigerung von Performance und Ausgabequalität in herausgezoomten Ansichten.

Benötigte Software (GDAL)

Die Operationen werden mit dem frei verfügbaren Kommandozeilen-Werkzeug GDAL durchgeführt.

Wichtig: Es sollte mindestens die Version 3.1 verwendet werden, da in älteren Versionen die Erstellung der Übersichts-Pyramiden unaussprechlich langsam ist (Tage bei der Größenordnung eines Landkreises).

Tipp: Bei Installationen von QGis ist eine entsprechend aktuelle Version von GDAL typischerweise mit dabei. Diese kann problemlos verwendet werden und ist im Installations-Ordner von QGis, z. B. C:\Programme\QGIS 3.40.0\bin\ zu finden.

Schritt 1: VRT-Erstellung

Erläuterungen allgemeiner Parameter:

-overwrite gibt an, dass eine ggf. schon existierende VRT-Datei mit gleichem Namen überschrieben werden soll

-resolution highest gibt an, dass bei einer Menge von Einzelbildern die Auflösung des Bildes mit der höchsten Auflösung als Auflösung für das Gesamtbild verwendet werden soll. In der Praxis wird das selten relevant sein, da die Bilder i.d.R. alle die gleiche Auflösung haben werden, aber zur Absicherung kann das nicht schaden.

gdalbuildvrt -resolution highest "Z:\Rasterdaten\gesamt.vrt" "Z:\Rasterdaten\*.tif" -overwrite 

Schritt 2: Gesamt-Tiff-Datei erzeugen

gdal_translate -co COMPRESS=DEFLATE -co PREDICTOR=3 -co TILED=YES -co BIGTIFF=YES -co NUM_THREADS=8 "Z:\Rasterdaten\gesamt.vrt" "Z:\Rasterdaten\gesamt.tif" 

I. d. R. profitieren alle Grids von einer Komprimierung. Der Speicherverbrauch auf dem Datenträger sinkt, je nach Datenlage, deutlich und bei der Verarbeitung ist der Aufwand zum Dekomprimieren geringer, als eine größere Datenmenge von einem Speichermedium lesen zu müssen.

cardo kann (Stand Mai 2025) mit den Methdoen DEFLATE und LZW umgehen. Der Unterschied zwischen beiden ist meist marginal und abhängig von den Daten.

Vergleich verschiedener Komprimierungsverfahren: Guide to GeoTIFF compression and optimization with GDAL

Komprimierung mittels DEFLATE:

Der Parameter Predictor sollte passend zu den Daten im Grid (Ganzzahlen oder Dezimalzahlen) angepasst werden.

Mögliche Werte für den Paramter Predictor:

  • (1 - kein spezieller Predictor)

  • 2 - für Ganzzahlen

  • 3 - für Dezimalzahlen

TILED=YES sollte unbedingt als Parameter verwendet werden. Er führt dazu, das die Daten in der Tiff-Datei in Blöcken (Kachlen) abgelegt werden und nicht zeilenweise. In der Praxis passt die blockweise Ablageform perfekt zur typischerweise rechteckig, ausschnittweise stattfindenden Datenabforderung, wodurch die Lesezugriffe deutlich effizienter stattfinden können als bei einer zeilenweisen Speicherung, wo für einen solchen Ausschnitt verschwenderischer Weise immer alle betroffenen Zeilen komplett gelesen werden müssen.

BIGTIFF=YES notwendig um Tiff-Dateien erzeugen zu können, die größer als 4 GB werden. Unschädlich, wenn die Dateigröße darunter bleibt.

NUM_THREADS=8 Bei den verlustfreien Komprimierungsverfahren ist i. d. R. eine parallele Datenverarbeitung möglich. NUM_THREADS gibt die maximale Anzahl von Prozessorkernen an, die dafür zum Einsatz kommen dürfen.

Schritt 3: Erzeugung einer Statistik-Datei

Statistikdaten können als Metainformation in der TIF-Datei eingebettet sein oder als begleitende .aux.xml-Datei vorliegen. Sind Statistikdaten vorhanden, kann cardo daraus den kleinsten und größten Datenwert lesen und verwendet diesen bei der Symbolik automatisch als Wertebereich.

Sollte noch keine Statistikinformation vorhanden sein, weder eingebettet noch als Begleitdatei, kann mit nachfolgendem Befehl die Generierung einer .aux.xml-Datei veranlasst werden.

Achtung!  

Eine neue .aux.xml-Datei wird nur erzeugt, wenn noch keinerlei Statistikdaten vorhanden sind, weder in der TIF-Datei eingebettet, noch als begleitende .aux.xml-Datei. Sollte es schon Statistikdaten in irgendeiner Form geben, werden diese bei der Ausführung des Befehls schlichtweg angezeigt! Eine bereits existierende .aux.xml-Datei kann zuvor gelöscht werden, um eine Neuerstellung zu erzwingen. In der TIF-Datei bereits eingebettete Statistikdaten können mittels der GDAL Komandozeilenwerkzeuge nicht gelöscht/verändert werden. Für neu erstellte Grid-Dateien dürften diese Umstände jedoch kein Problem darstellen, da diese noch keinerlei Statistikdaten enthalten.

gdalinfo --config GDAL_PAM_ENABLED YES -stats "Z:\Rasterdaten\gesamt.tif"

-stats Statistik über die Daten im Grid abrufen. Dies wird aus vorhandenen Metainformationen gelesen oder aus den Daten ermittelt, wenn keine Metainformationen zur Verfügung stehen.

--config GDAL_PAM_ENABLED YES in Kombination mit -stats veranlasst dies die Erstellung einer .aux.xml-Datei, sofern die Statistikdaten aus den Daten ermittelt werden mussten.

Schritt 4: Übersichts-Pyramide erzeugen

gdaladdo --config COMPRESS_OVERVIEW DEFLATE --config PREDICTOR_OVERVIEW 3 -r average -minsize 256 -ro "Z:\Rasterdaten\gesamt.tif" 

Außer bei sehr kleinen Tiff-Dateien (wenige MB) ist die Erstellung von Übersichts-Pyramiden immer zu empfehlen. Sie dienen gleichermaßen der Performance und der Darstellungsqualität in herausgezoomten Ansichten.

Die Komprimierung sollte gleichartig eingestellt werden, wie in der Basis-Datei.

Das Speicherlayout tiled wird für die Übersichts-Datei offenbar von der Basisdatei übernommen, braucht daher nicht explizit als Parameter angegeben werden.

-r average Gibt an, dass beim Herunterrechnen der Auflösung in den Pyramiden-Leveln ein mittlerer Farbwert aus allen Pixeln gebildet werden soll, die aus dem Level darunter in diesem Pixel vereint werden.

-minsize 256 gibt an, dass beim Aufbau der Pyramide so lange neue (kleinere) Level "zur Spitze hin" erzeugt werden sollen, bis die Kantenlänge des obersten Bildes 256 Pixel unterschreiten würde. Die Anzahl der dafür benötigten Pyramiden-Level (Teilungen des Basis-Tiff) wird hierbei automatisch berechnet und ist die deutlich bequemere und sinnvollere Form gegenüber der expliziten Angabe der Liste der gewünschten Teiler (2 4 8 ...) als explizite Parameter.

Da die Basis-Tiff-Datei wird mit der Option -ro ("read only") geöffnet wird, wird die Übersichtspyramide in einer separaten ovr-Datei mit gleichem Basis-Namen erzeugt. Diese OVR-Datei muss dann immer zusammen mit der Basis-Tiff-Datei abgelegt werden und wird automatisch erkannt und verwendet. Ohne das -ro Argument wird die Pyramide direkt in das Basis-Tiff geschrieben. Das ist prinzipiell auch möglich. Man hat dann im Ergebnis nur eine Datei, aber verliert Flexibilität (man hätte dann kein Tif mehr, welches "rein" die Daten enthält, sondern immer die Übersichtspyramiden mit im "Gepäck").

Wichtig:

Wenn ein Tiff über eine Übersichts-Pyramide verfügt, dann sollte bei der Verwendung im cardo die CSS-Eigenschaft render-quality auf den Wert standard gesetzt bzw. diese Angabe gänzlich weggelassen werden! Alle anderen render-quality Werte zielen darauf ab, sich dem Effekt anzunähern, den die vorberechnete Pyramide bereits als ureigenes Feature mit sich bringt, nämlich die Verrechnung vieler Quell-Pixel zu einem kombinierten Farbwert eines Darstellungs-Pixels im Ausgabebild in herausgezoomten Ansichten.

Tipp: Symbolik in cardo

Typischerweise werden Grid-Daten mittels dynamisch ermittelter Farben präsentiert. Dafür steht die Funktion linear-gradient zur Verfügung, die in der einfachsten Form eine Liste von Farbwerten übergeben bekommt (mindestens zwei) und über diese einen Farbverlauf (im RGB-Farbraum) generiert.

Zudem müssen der kleinste und größte Datenwert bekannt sein bzw. angegeben werden um den Bereich zu definieren, in dem die Visualisierung erfolgt. Ist zur Grid-Datei eine gleichnamige .aux.xml-Datei mit Statistikinformationen vorhanden, werden die dort hinterlegten Werte verwendet, wenn start-value und end-value nicht angegeben sind.

cell-color
{
    color: linear-gradient(green, yellow, red);
    start-value: 76; /* nicht erforderlich, wenn .aux.xml-Datei vorhanden ist */
    end-value: 115;  /* nicht erforderlich, wenn .aux.xml-Datei vorhanden ist */
}

Doku der Grid-Datenquelle

Doku der Grid Symbolik-Parameter


Zuletzt geändert: 16.05.2025 12:52:52 (erstmals erstellt 16.05.2025) // Alias: "TiffGrid"