基于参考栅格像素值从栅格堆栈对应层提取数值的R实现问题
实现代码
你需要的「根据索引栅格从对应波段提取同位置像素值」的操作,可以直接用raster包内置的stackSelect函数完成,该函数就是专门适配这个场景设计的,无需自行编写复杂的逐像素遍历逻辑,运行效率很高。
你给出的示例基础构造代码+核心实现代码如下:
library(raster) # 构造示例数据 r <- raster(nrow=5, ncol=5) # 索引栅格r0,值范围1-10对应栅格堆栈的10个波段 r0 <- setValues(r, round(runif(25,min = 1, max = 10)), 0) # 构造10个单波段栅格 r1 <- setValues(r, runif(ncell(r))) r2 <- setValues(r, runif(ncell(r))) r3 <- setValues(r, runif(ncell(r))) r4 <- setValues(r, runif(ncell(r))) r5 <- setValues(r, runif(ncell(r))) r6 <- setValues(r, runif(ncell(r))) r7 <- setValues(r, runif(ncell(r))) r8 <- setValues(r, runif(ncell(r))) r9 <- setValues(r, runif(ncell(r))) r10 <- setValues(r, runif(ncell(r))) # 生成栅格堆栈s s <- stack(r1, r2, r3, r4,r5, r6,r7,r8,r9,r10) # 核心实现:按r0的索引提取对应波段同位置像素,输出单图层栅格result result <- stackSelect(s, r0)
如果需要验证结果正确性,可以随便取某个位置的数值做对比:
# 取第2个像素位置做验证 # 查看r0第2个像素的索引值 r0[2] # 查看s对应波段第2个像素的数值 s[[r0[2]]][2] # 查看输出结果第2个像素的数值,和上面一致即为正确 result[2]
内容的提问来源于stack exchange,提问作者Geo-sp
相关产品推荐
相关产品推荐

