gdal
====
`gdal `_ ist eine Bibliothek zur Bearbeitung und Umwandlung von räumlichen Raster- und Vektordaten. Daneben
bietet es auch zahlreiche Kommandozeilenprogramme.
gdal ist Open Source und für Linux und Windows verfügbar. Zur Installation sei auf die oben verlinkte Website verwiesen.
Beispiele
---------
Datenumwandlung
^^^^^^^^^^^^^^^
Das Digitale Geländemodell wird im Format GeoTIFF zur Verfügung gestellt. Sie wollen die Daten jedoch
im Format ASCII Grid:
.. code-block:: console
$ gdal_translate -of AAIGrid 691_5327.tif 691_5327.asc
Der Schalter ``-of`` gibt hierbei das Ausgabeformat an. ``gdal_translate --formats`` listet die verfügbaren Quell- und Zielformate auf,
``gdal_translate -h`` liefert eine Kurzbeschreibung der Parameter und die Seite `gdal_translate `_ zeigt eine
ausführliche Anleitung zu diesem Kommandozeilentool.
Datenaggregation
^^^^^^^^^^^^^^^^
Sie haben Sich mittels aria2c und dem entsprechenden MetaLink-File die DOP-Kacheln ihrer Gemeinde heruntergeladen. Jetzt haben Sie ein Verzeichnis voll mit 1km²-Kacheln,
Sie hätten aber gerne nur **ein** Bild.
.. figure:: images/qgis-tiles.png
QGIS mit allen heruntergeladenen Kacheln der Gemeinde Taufkirchen
Abhilfe schafft hier ``gdalwarp``.
.. code-block:: console
$ gdalwarp -dstalpha -co "TILED=YES" -co "COMPRESS=LZW" 32*.tif taufkirchen.tif
.. figure:: images/qgis-single.png
QGIS mit dem aggregierten Bild und einer freien Webkarte (Top Plus Open des BKG) als Hintergrund
``-dstalpha``
fügt einen Alpha-Kanal für die Transparenz hinzu. Dadurch wird an den Stellen ohne Informationen der Hintergrund sichtbar.
``-co "TILED=YES"``
sorgt für eine interne Kachelung des Bildes. Dadurch werden beim Hineinzoomen in das Bild nur die Teile gelesen, die für die Darstellung benötigt werden.
``-co "COMPRESS=LZW"``
sorgt dafür, dass die Rasterdaten im GeoTIFF komprimiert werden.
``32*.tif``
Die Dateinamen der Kacheln beginnen in diesem Falle alle mit 32. ``gdalwarp`` liest alle Dateien ein, die auf dieses Pattern passen.
``taufkirchen.tif``
Der Name der Zieldatei, die durch ``gdalwarp`` erzeugt wird.
Wenn die durch ``gdalwarp`` erzeugte Datei jetzt beispielsweise in QGIS geladen wird, dauert die Darstellung etwas, weil zunächst das ganze Bild geladen und dann
für die Darstellung verkleinert werden muss. Abhilfe schafft hier ``gdaladdo``, mit dem *Overviews* (Übersichten) in das Bild gerechnet werden können. Die Datei
wird dadurch zwar größer, aber die deutlich kürzeren Ladezeiten entschädigen dafür ausreichend.
.. code-block:: shell-session
Erzeugen der Übersichten
Die Zahlen sind Bruchteile der Ursprungsauflösung, hier also 1/2, 1/4, ...
$ gdaladdo taufkirchen.tif 2 4 8 16
Das Resultat mit gdalinfo betrachten:
$ gdalinfo taufkirchen.tif
Driver: GTiff/GeoTIFF
Files: taufkirchen.tif
Size is 20000, 17500
Coordinate System is:
PROJCRS["ETRS89 / UTM zone 32N",
BASEGEOGCRS["ETRS89",
DATUM["European Terrestrial Reference System 1989",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
ID["EPSG",4258]],
CONVERSION["UTM zone 32N",
METHOD["Transverse Mercator",
ID["EPSG",9807]],
PARAMETER["Latitude of natural origin",0,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8801]],
PARAMETER["Longitude of natural origin",9,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8802]],
PARAMETER["Scale factor at natural origin",0.9996,
SCALEUNIT["unity",1],
ID["EPSG",8805]],
PARAMETER["False easting",500000,
LENGTHUNIT["metre",1],
ID["EPSG",8806]],
PARAMETER["False northing",0,
LENGTHUNIT["metre",1],
ID["EPSG",8807]]],
CS[Cartesian,2],
AXIS["(E)",east,
ORDER[1],
LENGTHUNIT["metre",1]],
AXIS["(N)",north,
ORDER[2],
LENGTHUNIT["metre",1]],
USAGE[
SCOPE["unknown"],
AREA["Europe - 6°E to 12°E and ETRS89 by country"],
BBOX[38.76,6,83.92,12]],
ID["EPSG",25832]]
Data axis to CRS axis mapping: 1,2
Origin = (692000.000000000000000,5326000.000000000000000)
Pixel Size = (0.400000000000000,-0.400000000000000)
Metadata:
AREA_OR_POINT=Area
BILDFLUG_DATUM=*
BILDFLUG_NUMMER=*
BILDFLUG_UNTERNUMMER=0
Image Structure Metadata:
COMPRESSION=LZW
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left ( 692000.000, 5326000.000) ( 11d34'36.77"E, 48d 3'30.12"N)
Lower Left ( 692000.000, 5319000.000) ( 11d34'25.48"E, 47d59'43.62"N)
Upper Right ( 700000.000, 5326000.000) ( 11d41' 2.87"E, 48d 3'21.27"N)
Lower Right ( 700000.000, 5319000.000) ( 11d40'51.11"E, 47d59'34.79"N)
Center ( 696000.000, 5322500.000) ( 11d37'44.06"E, 48d 1'32.50"N)
Band 1 Block=256x256 Type=Byte, ColorInterp=Red
Overviews: 10000x8750, 5000x4375, 2500x2188, 1250x1094
Mask Flags: PER_DATASET ALPHA
Overviews of mask band: 10000x8750, 5000x4375, 2500x2188, 1250x1094
Band 2 Block=256x256 Type=Byte, ColorInterp=Green
Overviews: 10000x8750, 5000x4375, 2500x2188, 1250x1094
Mask Flags: PER_DATASET ALPHA
Overviews of mask band: 10000x8750, 5000x4375, 2500x2188, 1250x1094
Band 3 Block=256x256 Type=Byte, ColorInterp=Blue
Overviews: 10000x8750, 5000x4375, 2500x2188, 1250x1094
Mask Flags: PER_DATASET ALPHA
Overviews of mask band: 10000x8750, 5000x4375, 2500x2188, 1250x1094
Band 4 Block=256x256 Type=Byte, ColorInterp=Alpha
Overviews: 10000x8750, 5000x4375, 2500x2188, 1250x1094
``gdalinfo`` liefert umfangreiche Informationen über einen Datensatz. Neben den Angaben zur Projektion sind hier vor allem
die Kanäle (vorhandensein eines Alpha-Channels), deren Aufteilung in Blöcke (durch ``TILED=YES``) und die Overviews (durch ``gdaladdo``) interessant.