Los GeoTIFF realizados en GDAL no tienen un rango mínimo / máximo cuando se cargan en Arc / QGIS

11

Estoy creando algunos rásteres de punto flotante en GDAL con el controlador GeoTIFF. Cuando cargo las imágenes resultantes en QGIS o Arc, la simbología predeterminada pone el mínimo en -3.40282e38 y el máximo en 3.40282e38, por lo que el ráster se ve exactamente gris. ¿Hay alguna manera de poder escribir el rango real en el GeoTIFF directamente para que cuando se cargue en un programa SIG, escale el histograma automáticamente? Intenté crear un histograma predeterminado como este:

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

Pero recibo un error que parece un problema vinculante:

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

¿Alguna sugerencia sobre lo que podría hacer o si he cometido un error?

Rico
fuente

Respuestas:

8

Si está generando los datos, puede realizar un seguimiento de los mínimos y máximos sobre la marcha. Si no tiene control directo de los datos de origen, diga si está componiendo datos existentes, entonces usar ComputeRasterMinMax(0)está bien.

De cualquier manera, después de obtener sus valores mínimo y máximo, debe llamar SetStatistics()a la banda y asegurarse de configurar su conjunto de datos Nonecuando haya terminado para asegurarse de que todo se escriba en el disco.

Además, algo en el fondo de mi mente me dice que el uso dataset.GetRasterBand(1).<some band function>no funcionará correctamente debido a la forma en que GDAL Python maneja las referencias de banda. No recuerdo los detalles, pero había algo en la lista de correo de GDALDev hace algún tiempo. Por lo tanto, es mejor crear una variable de banda explícitamente band = dataset.GetRasterBand(1), y luego llamar band.SetStatistics(min, max, mean, stddev).

MerseyViking
fuente
Gracias, esto hizo el truco, y gracias por el contexto. Por cierto, pude anidar la referencia de banda sin una variable temporal sin problemas.
Rico
Tenga en cuenta que band.ComputeStatistics(0)también almacena estadísticas. Es una línea fácil de 1.
Mike T
1

No conozco una manera de hacerlo usando GDAL, pero puede usar python para llamar a la herramienta 'calcular estadísticas' en Arc.

Ciro
fuente
2
Hola Cyrus, bienvenido a GIS.se :) Si bien es correcto, es poco probable que su respuesta atraiga votos por dos razones. La herramienta de cálculo de estadísticas de arcpy coloca las estadísticas en un archivo externo .aux y el póster pide "directamente al geotiff". En segundo lugar, aunque Arcgis se menciona en el título, el cuerpo de la pregunta y sus etiquetas indican que el póster está realmente más interesado en una solución gdal / qgis. En cualquier caso, gracias por contribuir y sigan así. Comenzar es una curva de aprendizaje, pero creo que con el tiempo descubrirá que el esfuerzo se amortiza.
Matt Wilkie