I GeoTIFF realizzati in GDAL non hanno un intervallo min / max quando caricati in Arc / QGIS


11

Sto creando alcuni raster in virgola mobile in GDAL con il driver GeoTIFF. Quando carico le immagini risultanti in QGIS o Arc, la simbologia predefinita mette il minimo a -3.40282e38 e il massimo a 3.40282e38, quindi il raster appare esattamente grigio. Esiste un modo in cui posso scrivere direttamente l'intervallo effettivo nel GeoTIFF, quindi quando viene caricato in un programma GIS ridimensiona automaticamente l'istogramma? Ho provato a creare un istogramma predefinito come questo:

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

Ma ricevo un errore che sembra un problema vincolante:

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

Qualche suggerimento su cosa avrei potuto fare o se avessi fatto un errore?

Risposte:


8

Se stai generando i dati, puoi tenere traccia al volo di minimo e massimo. Se non hai il controllo diretto dei dati di origine, ComputeRasterMinMax(0)indica se stai componendo i dati esistenti, quindi utilizzare va bene.

In ogni caso, dopo aver ottenuto i valori minimo e massimo, dovresti chiamare SetStatistics()sulla banda e assicurarti di impostare il set di dati su Nonequando hai finito per assicurarti che tutto venga scritto sul disco.

Inoltre, qualcosa nella parte posteriore della mia mente mi sta dicendo che l'uso dataset.GetRasterBand(1).<some band function>non funzionerà correttamente a causa del modo in cui GDAL Python gestisce i riferimenti di banda. Non ricordo i dettagli, ma c'era qualcosa nella mailing list di GDALDev qualche tempo fa. Quindi è meglio creare esplicitamente una variabile di banda:, band = dataset.GetRasterBand(1)quindi chiama band.SetStatistics(min, max, mean, stddev).


Grazie, questo ha funzionato e grazie per il contesto. A proposito, sono stato in grado di annidare il riferimento di banda senza una variabile temporanea senza problemi.
Ricco

Si noti che band.ComputeStatistics(0)memorizza anche le statistiche. È una linea semplice.
Mike T,

1

Non sono a conoscenza di un modo per farlo usando GDAL, ma puoi usare Python per chiamare lo strumento "calcola le statistiche" in Arc.


2
Ciao Cyrus, benvenuto su GIS.se :) Sebbene corretta, è improbabile che la tua risposta attiri voti per due motivi. Lo strumento arcpy di calcolo delle statistiche inserisce le statistiche in un file .aux esterno e il poster chiede "direttamente nel geotiff". In secondo luogo, sebbene Arcgis sia menzionato nel titolo, il corpo della domanda e i suoi tag indicano che il poster è davvero più interessato a una soluzione gdal / qgis. In ogni caso, grazie per il contributo e per favore continuate così. È un po 'una curva di apprendimento per iniziare, ma penso che nel tempo scoprirai che lo sforzo si ripaga da solo.
matt wilkie,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.