温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Stacking of Raster Image and Compressing it in python
python raster gdal

其他 - 栅格图像堆叠并在python中压缩

发布于 2020-03-29 12:56:28

我正在尝试堆叠栅格.tif文件,我有12个.tif文件,但我也想在python中压缩输出的堆叠文件。

这是我当前用于堆叠文件的工作代码,但是堆叠后文件的大小非常大

from osgeo import gdal
outvrt='/vsimen/Stacked.tif'
outtif='E:/Users/Compressed_files/Stacked.tif'
tifs=glob.glob('E:/Users/Compressed_files/*.tif')
outds=gdal.BuildVRT(outvrt,tifs,seperate=True)
outds=gdal.Translate(outtif,outds)

查看更多

查看更多

提问者
Its_me
被浏览
33
Val 2020-02-05 02:13

您可以将TranslateOptions对象传递给您的gdalTranslate调用,在其中可以添加相关对象creationOptions进行压缩。

因此,作为伪代码:

from osgeo import gdal

topts = gdal.TranslateOptions(creationOptions=['COMPRESS=LZW', 'PREDICTOR=2'])
outds=gdal.Translate(outtif,outds, options=topts)

当然,这些选项也可以是一个字符串或字符串数​​组-使用并不是强制性的TranslateOptions

另外,伪代码中使用的压缩设置仅是示例。为了获得最大收益,您应该选择适合您数据的选项。

这是GeoTiffs可用选项文档摘录

[COMPRESS = JPEG / LZW / PACKBITS / DEFLATE / CCITTRLE / CCITTFAX3 / CCITTFAX4 / LZMA / ZSTD / LERC / LERC_DEFLATE / LERC_ZSTD / WEBP / NONE]:设置要使用的压缩率。JPEG通常仅应与字节数据一起使用(每通道8位)。但是从GDAL 1.7.0开始,并假设GDAL是使用内部libtiff和libjpeg构建的,则可以读取和写入具有12位JPEG压缩TIFF文件的TIFF文件(视为NBITS = 12的UInt16波段)。有关更多详细信息,请参见“ TIFF中的8位和12位JPEG”维基页面。CCITT压缩仅应与1位(NBITS = 1)数据一起使用。LZW,DEFLATE和ZSTD压缩可以与PREDICTOR创建选项一起使用。从GDAL 2.3开始,如果使用内部libtiff且GDAL是根据libzstd> = 1.0构建的,或者如果是使用zstd支持的外部libtiff构建的,则ZSTD从GDAL 2.3开始可用。从GDAL 2.4开始,使用内部libtiff时可以使用LERC / LERC_DEFLATE / LERC_ZSTD(对于LERC_ZSTD,请参见上述条件)。默认为无。

NUM_THREADS =线程数/ ALL_CPUS :(从GDAL 2.1开始)通过指定辅助线程数来启用多线程压缩。值得慢压缩,例如DEFLATE或LZMA。对于JPEG将被忽略。默认为主线程中的压缩。

PREDICTOR = [1/2/3]:设置LZW,DEFLATE和ZSTD压缩的预测变量。默认值为1(无预测变量),2为水平差分,3为浮点预测。