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?

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).


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.