使用terra包app族函数实现栅格与向量运算及SpatRasterDataset操作问询
terra包SpatRasterDataset多值向量运算实现方案
完全可以实现,你编写的测试代码核心逻辑正确,调整后即可得到n个结果栅格的输出,具体内容如下:
完整可运行代码
library(terra) # 基础数据准备 s <- rast(system.file("ex/logo.tif", package="terra"))[[1]] # 构建SpatRasterDataset srd <- sds(list(i = s, j = s/10)) # 自定义运算函数 fun = function(i, j) { v <- c(1, 10, 100, 1000) f <- i + j return(v / f) } # 执行运算,无需额外指定recursive参数,默认即可匹配需求 r <- lapp(srd, fun = fun)
结果说明
运行后得到的r是4层的SpatRaster,每层分别对应向量中4个值和栅格运算的结果,完全符合你的需求。
注意事项与优化建议
- 需保证SpatRasterDataset中所有子数据集的空间范围、分辨率、行列数完全一致,否则运算会报错
- 可以将运算向量作为参数传入
lapp,不需要硬编码在函数内部,灵活适配不同的输入向量:
# 更灵活的参数化写法 fun_param <- function(i, j, v) { f <- i + j return(v / f) } custom_v <- c(2, 20, 200, 2000) r_param <- lapp(srd, fun = fun_param, v = custom_v)
- 自定义函数返回的向量长度就是最终输出栅格的层数,可根据需求调整向量长度得到对应数量的结果栅格
内容的提问来源于stack exchange,提问作者Marcos
相关产品推荐
相关产品推荐

