GeoTIFFs fabricados em GDAL não têm alcance mínimo / máximo quando carregados no Arc / QGIS

11

Estou criando alguns rasters de ponto flutuante no GDAL com o driver GeoTIFF. Quando carrego as imagens resultantes no QGIS ou no Arc, a simbologia padrão coloca o mínimo em -3.40282e38 e o máximo em 3.40282e38, para que a varredura pareça exatamente cinza. Existe uma maneira de escrever o intervalo real no GeoTIFF diretamente para que, quando carregado em um programa GIS, ele automaticamente dimensione o histograma de maneira agradável? Eu tentei criar um histograma padrão como este:

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

Mas recebo um erro que parece um problema vinculativo:

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

Alguma sugestão sobre o que eu poderia fazer ou se eu cometi um erro?

Rico
fonte

Respostas:

8

Se você estiver gerando os dados, poderá acompanhar o mínimo e o máximo em tempo real. Se você não tem controle direto dos dados de origem, diga se está compondo os dados existentes, o uso ComputeRasterMinMax(0)é adequado.

De qualquer forma, depois de obter seus valores mínimo e máximo, você deve ligar SetStatistics()para a banda e definir seu conjunto de dados Nonequando terminar para garantir que tudo seja gravado no disco.

Além disso, algo no fundo da minha mente está me dizendo que o uso dataset.GetRasterBand(1).<some band function>não funcionará corretamente devido à maneira como o GDAL Python lida com as referências de banda. Não me lembro dos detalhes, mas havia algo na lista de correio do GDALDev há algum tempo. Portanto, é melhor criar uma variável de banda explicitamente:, band = dataset.GetRasterBand(1)e ligue band.SetStatistics(min, max, mean, stddev).

MerseyViking
fonte
Obrigado, isso fez o truque e obrigado pelo contexto. A propósito, eu era capaz de aninhar a referência da banda sem uma variável temporária sem problemas.
19311 Rich
Observe que band.ComputeStatistics(0)também armazena estatísticas. É uma linha fácil.
Mike T
1

Não conheço uma maneira de fazer isso usando GDAL, mas você pode usar python para chamar a ferramenta 'calcular estatísticas' no Arc.

Cyrus
fonte
2
Olá Cyrus, seja bem-vindo ao GIS.se :) Embora correta, é improvável que sua resposta atraia votos por dois motivos. A ferramenta de cálculo de estatísticas do arcpy coloca as estatísticas em um arquivo .aux externo e o pôster pede "diretamente no geotiff". Em segundo lugar, embora o Arcgis seja mencionado no título, o corpo da pergunta e suas tags indicam que o pôster está realmente mais interessado em uma solução gdal / qgis. De qualquer forma, obrigado por contribuir e continue. É um pouco de curva de aprendizado para começar, mas acho que você descobrirá com o tempo que o esforço se paga.
Matt Wilkie