R语言如何将小范围栅格复制到更大范围空栅格并生成栅格堆栈?
R语言栅格拼接解决方案
前置准备
使用目前R生态性能最优的terra栅格处理包实现,无需复杂自定义函数,完全适配你的需求场景:
# 安装加载依赖包 install.packages("terra") library(terra)
步骤1:创建目标大栅格模板
根据你提供的大栅格参数生成全NA的基础模板:
target_template <- rast( ext = ext(650585.3, 653000.3, 4745829, 4748292), nrows = 821, ncols = 805, res = c(3,3), # 这里替换为你实际的UTM坐标系EPSG编码,比如北半球UTM50带为EPSG:32650 crs = "EPSG:xxxx" ) # 初始化所有值为NA values(target_template) <- NA
步骤2:批量处理小栅格
场景A:所有小栅格拼接为单波段栅格
如果30个小栅格是同一份数据的拆分块,需要合并为单波段大栅格:
# 批量读取文件夹下所有小栅格,此处默认格式为tif,可自行修改pattern参数 small_rasts <- list.files( path = "你的小栅格存储文件夹路径", pattern = "\\.tif$", full.names = TRUE ) |> lapply(rast) # 方法1:直接调用merge,你的数据坐标差均为分辨率整数倍,不存在原点对齐问题 merged_result <- do.call(merge, c(list(target_template), small_rasts)) # 方法2:低层级直接赋值,性能更高适合大数量栅格 merged_result <- target_template for (sr in small_rasts) { target_cells <- cells(merged_result, ext(sr)) merged_result[target_cells] <- sr[] }
场景B:所有小栅格生成多波段堆栈
如果30个小栅格是不同时序/不同指标的同范围数据,需要生成多波段堆栈:
# 批量将小栅格扩展到目标模板范围,再直接堆叠为多波段栅格 rast_stack <- lapply(small_rasts, \(x) extend(x, target_template)) |> rast()
注意事项
- 若小栅格存在重叠区域,
merge默认保留第一个出现的非NA值,如需重叠区计算可添加fun = mean/max等自定义函数参数 - 你提供的样例大小栅格坐标差均为分辨率3的整数倍,完全对齐,不会触发原点校验报错
内容的提问来源于stack exchange,提问作者Nate Lockwood
相关产品推荐
相关产品推荐

