如何对大栅格rr1中值为2的像素范围内的小栅格rr2像素值求和
计算大栅格指定像素覆盖的小栅格像素总和
实现步骤
默认创建的两个栅格空间范围一致,直接按以下步骤操作即可:
创建rr1中值为2的像素掩码
将rr1里值为2的像素标记为1,其余设为NA,生成掩码栅格:# 生成掩码:仅保留值为2的像素,标记为1 rr1_mask <- rr1 rr1_mask[rr1_mask != 2] <- NA rr1_mask[rr1_mask == 2] <- 1将掩码重采样至rr2的分辨率
因为rr2分辨率更高,需要把rr1的掩码匹配到rr2的像素尺度,确保每个rr2像素都能被标记是否属于目标区域:# 用最近邻法重采样,保证区域归属准确 rr2_mask <- resample(rr1_mask, rr2, method = "ngb")计算rr2中目标区域的像素总和
通过掩码筛选rr2的对应像素,再求和:# 提取被覆盖的像素值并计算总和 total_sum <- sum(rr2[!is.na(rr2_mask)], na.rm = TRUE) print(total_sum)
完整代码
library(raster) # 生成示例栅格 rr1 <- raster(ncol=10, nrow=10) rr1[] <- runif(ncell(rr1)) rr1[1]=2 rr1[10]=2 rr1[50]=2 rr2 <- raster(ncol=250, nrow=360) rr2[] <- runif(ncell(rr2)) # 创建掩码 rr1_mask <- rr1 rr1_mask[rr1_mask != 2] <- NA rr1_mask[rr1_mask == 2] <- 1 # 重采样掩码到rr2分辨率 rr2_mask <- resample(rr1_mask, rr2, method = "ngb") # 计算总和 total_sum <- sum(rr2[!is.na(rr2_mask)], na.rm = TRUE) print(total_sum)
补充说明
- 采用最近邻法重采样是为了避免插值导致的区域归属错误,确保rr2像素准确对应rr1的原始像素范围。
- 若两个栅格空间范围不一致,需先用
extent或projectRaster调整至相同范围后再执行上述步骤。
内容的提问来源于stack exchange,提问作者Tpellirn
相关产品推荐
相关产品推荐

