In GDAL erstellte GeoTIFFs haben beim Laden in Arc / QGIS keinen Min / Max-Bereich

11

Ich erstelle einige Gleitkomma-Raster in GDAL mit dem GeoTIFF-Treiber. Wenn ich die resultierenden Bilder in QGIS oder Arc lade, setzt die Standardsymbologie die Min auf -3.40282e38 und die Max auf 3.40282e38, sodass das Raster genau grau aussieht. Gibt es eine Möglichkeit, den tatsächlichen Bereich direkt in das GeoTIFF zu schreiben, damit es beim Laden in ein GIS-Programm das Histogramm automatisch gut skaliert? Ich habe versucht, ein Standardhistogramm wie folgt zu erstellen:

rasterMin, rasterMax = raster.GetRasterBand(1).ComputeRasterMinMax()
raster.GetRasterBand(1).SetDefaultHistogram(rasterMin, rasterMax, 255)

Aber ich bekomme einen Fehler, der wie ein verbindliches Problem aussieht:

  File "/usr/lib/python2.6/dist-packages/osgeo/gdal.py", line 846, in SetDefaultHistogram
    return _gdal.Band_SetDefaultHistogram(self, *args)
TypeError: not a sequence

Irgendwelche Vorschläge, was ich tun könnte oder ob ich einen Fehler gemacht habe?

Reich
quelle

Antworten:

8

Wenn Sie die Daten generieren, können Sie die Min- und Max-Werte im Handumdrehen verfolgen. Wenn Sie keine direkte Kontrolle über die Quelldaten haben, z. B. wenn Sie vorhandene Daten zusammensetzen, ist die Verwendung ComputeRasterMinMax(0)in Ordnung.

In beiden Fällen sollten Sie, nachdem Sie Ihre Min- und Max-Werte erhalten haben, SetStatistics()das Band aufrufen und sicherstellen, dass Sie Ihren Datensatz auf " NoneWenn Sie fertig sind" einstellen, um sicherzustellen, dass alles auf die Festplatte geschrieben wird.

Außerdem sagt mir etwas im Hinterkopf, dass die Verwendung dataset.GetRasterBand(1).<some band function>aufgrund der Art und Weise, wie GDAL Python mit Bandreferenzen umgeht, nicht richtig funktioniert. Ich kann mich nicht an die Details erinnern, aber vor einiger Zeit stand etwas auf der GDALDev-Mailingliste. Daher ist es am besten, eine Bandvariable explizit zu erstellen : band = dataset.GetRasterBand(1), und dann aufzurufen band.SetStatistics(min, max, mean, stddev).

MerseyViking
quelle
Danke, das hat den Trick gemacht und danke für den Kontext. Übrigens konnte ich die Bandreferenz ohne temporäre Variable ohne Probleme verschachteln.
Rich
Beachten Sie, dass band.ComputeStatistics(0)auch Statistiken gespeichert werden. Es ist eine einfache 1-Zeile.
Mike T
1

Mir ist keine Möglichkeit bekannt, dies mit GDAL zu tun, aber Sie können Python verwenden, um das Tool "Statistik berechnen" in Arc aufzurufen.

Cyrus
quelle
2
Hallo Cyrus, willkommen bei GIS.se :) Obwohl richtig, ist es aus zwei Gründen unwahrscheinlich, dass Ihre Antwort Stimmen anzieht. Das Arcpy-Tool zum Berechnen von Statistiken speichert die Statistiken in einer externen .aux-Datei und das angeforderte Poster "direkt in den Geotiff". Zweitens, obwohl Arcgis im Titel erwähnt wird, zeigen der Hauptteil der Frage und seine Tags, dass das Poster wirklich mehr an einer gdal / qgis-Lösung interessiert ist. Auf jeden Fall danke für Ihren Beitrag und bitte weiter so. Es ist ein bisschen Lernaufwand, um loszulegen, aber ich denke, Sie werden mit der Zeit feststellen, dass sich die Mühe von selbst auszahlt.
Matt Wilkie