如何批量为目录下所有单波段栅格通过重复堆叠生成3波段栅格堆栈?
单波段GeoTIFF批量转三波段栅格实现方法
你已经掌握单张影像的三波段堆叠逻辑,批量处理的核心是遍历目标目录下所有符合格式的GeoTIFF文件,逐张复用你已验证可用的单张处理代码即可,无需调整核心堆叠逻辑。
具体实现步骤
- 提前加载依赖包
执行代码加载处理栅格所需的工具包:library(raster) - 定义输入、输出路径
注意:需要提前手动创建好output_dir对应的实体文件夹,避免文件写入报错# 存放待处理单波段GeoTIFF的目录 input_dir <- "你的单波段影像存放路径" # 存放处理完成的三波段栅格的目录 output_dir <- "你的输出文件存放路径" - 匹配目录下所有待处理栅格文件
调用文件遍历函数,自动读取目录下所有后缀为.tif的文件完整路径:tif_list <- list.files(path = input_dir, pattern = "\\.tif$", full.names = TRUE) - 循环逐张执行处理逻辑
遍历匹配到的所有栅格文件,逐张执行读取、堆叠、保存操作:for (single_tif in tif_list) { # 读取单波段影像 img <- raster(single_tif) # 重复堆叠3次生成三波段栅格,和单张处理逻辑完全一致 stack_img <- stack(img, img, img) # 按原文件名保存输出,不改动原文件命名 out_file <- file.path(output_dir, basename(single_tif)) # 写入为标准GeoTIFF格式 writeRaster(stack_img, filename = out_file, format = "GTiff", overwrite = TRUE) }
常见调整说明
- 如果目录下同时存在
.tif和.tiff两种后缀的影像,将文件匹配规则的pattern参数修改为"\\.tiff?$",即可同时匹配两类格式 - 如果不希望覆盖输出目录下已有的同名影像,将
writeRaster函数中的overwrite = TRUE修改为overwrite = FALSE即可 - 如果处理大尺寸栅格时出现内存不足的报错,可以在脚本开头添加
rasterOptions(maxmemory = 2e+09),调整栅格处理的内存阈值
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

