python 使用GDAL合并叠置栅格

sr4lhrrt  于 2023-01-24  发布在  Python
关注(0)|答案(1)|浏览(214)

我有大约211个栅格,每个栅格代表世界上的每个区域。下面是其中一个栅格的gdalinfo。除了关注的区域外,它们都是相同的。值总是在1-6之间。

我想把它们合并成一个巨大的光栅,我已经成功地做到了这一点,首先建立一个VRT,然后把VRT写入一个文件:

gdalbuildvrt.exe -b 1 -q -input_file_list my_files.txt global_file.vrt

gdal_translate.exe -q -co PREDICTOR=2 -co COMPRESS=LZW -of GTiff -co BIGTIFF=YES -co TILED=YES -co NUM_THREADS=ALL_CPUS global_file.vrt global_file.tif

结果是大约15 GB的大小。
但是我的问题是,每个国家经常有重叠的区域。在这种情况下,我需要取最大光栅/像素值。但是gdal_translate没有这样做,它只取最后写入的值。
我读到了PixelFunction(https://gis.stackexchange.com/questions/350233/how-can-i-modify-a-vrtrasterband-sub-class-etc-from-python),并试图实现它,但我一直遇到内存问题。
有没有人有任何关于内存安全的方法来合并一个大的光栅列表,并在它们重叠的地方取最大值的想法?如果最好的方法是PixelFunction,那么让我知道,我会提供更多关于错误的细节。
谢了,詹姆斯

j91ykkif

j91ykkif1#

尝试减小输出块大小,使用BLOCKXSIZE=128BLOCKYSIZE=128

gdal_translate.exe -q -co PREDICTOR=2 -co COMPRESS=LZW -of GTiff -co BIGTIFF=YES -co BLOCKXSIZE=128 -co BLOCKYSIZE=128 -co TILED=YES -co NUM_THREADS=ALL_CPUS global_file.vrt global_file.tif

这将需要明显更少的内存。
如果这不起作用,你的下一个选择是将你所有的输入文件转换成128x128平铺的geotiffs.唉,在GDAL〈3.7中你不能改变VRT驱动程序的块大小,这是3.7中的东西.

相关问题