A GDAL pode informar se um .tiff é lado a lado ou não?

9

Um determinado software que eu uso não suporta DEMs difíceis. Existe uma maneira com um utilitário GDAL para determinar se um DEM .tiff está lado a lado ou não?

gdalinfo dem.tif 

relatará o tipo de compactação e o tipo de intercalação (banda / pixel), mas, tanto quanto eu posso dizer, o tipo de intercalação não tem nada a ver com lado a lado.

você pode traduzir o DEM tiff com um sinalizador de opção de criação para fazer um DEM antecipado, mas isso requer uma tradução e não apenas um relatório.

gdal_translate -co TILED=NO dem.tif dem_notile.tif
jamierob
fonte

Respostas:

11

Não encontrei nenhum utilitário específico de linha de comando que possa relatar se um tiff é lado a lado ou listrado. Pelo menos não diretamente ou em uma forma grepable como TILED=YES.

gdalinfoEntretanto, deve haver informações suficientes para tomar essa decisão.

Eu tenho uma cena de landsat, cada uma feita com gdal_translate:

landsat_tiled.tif : -co TILED=YES

landsat_notiled.tif: -co TILED=NO

gdalinfo landsat_tiled.tif | grep -E 'Block=|Size is'
>>Size is 7621, 7791
>>Band 1 Block=256x256 Type=UInt16, ColorInterp=Gray

gdalinfo landsat_notiled.tif | grep -E 'Block=|Size is'
>>Size is 7621, 7791
>>Band 1 Block=7621x1 Type=UInt16, ColorInterp=Gray

Portanto, é óbvio que os blocos de azulejos têm um tamanho de bloco Y maior que 1. Os blocos de tiras têm tamanho de bloco X igual ao tamanho XSize e tamanho de bloco Y igual a 1.

Isso deve ser suficiente para determinar se eles são listrados (não lado a lado).

gdalinfo landsat_notiled.tif | grep -o 'Block=.*x1\s'
>>Block=7621x1

Se essa chamada retornar algo, você pode ter certeza de que NÃO está lado a lado.

Isso não trata de tiffs muito pequenos, que podem ter toda a matriz raster armazenada em um único bloco. Então YMMV naqueles ..

Logan Byers
fonte
2
Acabei de criar uma tiff 50x1 lado a lado com gdal_translate -srcwin 0 0 50 1 -co tiled=YES input.tif test_tiled.tif. gdalinfoainda relata, Block=256x256para que seu método funcione também para pequenos detalhes.
usar o seguinte comando