r - 计算 R 中像素(计数)栅格文件的数量

标签 r raster r-raster spatial-data

我有大量的光栅文件和一个位于光栅文件范围内的多边形。我想获取多边形内每个光栅文件的像素数(计数)。 此外,我想为每个光栅文件创建一个表,其中包含光栅文件的名称和像素数(列出)。 我试过堆叠但我无法跟踪名称。在 R 中还有其他方法可以执行此任务吗?

最佳答案

请始终包含示例数据

library(raster)
fn <-system.file("external/rlogo.grd", package="raster")
s <- stack(fn)
s[[1]][1:5000] <- NA
s[[2]][5001:ncell(s)] <- NA
names(s)
#[1] "red"   "green" "blue" 
p <- rbind(c(5,20), c(25,55), c(50, 20), c(20,6), c(5,20))
pol <- spPolygons(p)

plot(s, addfun=function() lines(pol, lwd=2))

我不太确定你在找什么。如果您可以堆叠它们(您说可以),则所有栅格的单元格(像素)数量都是相同的。我假设您想要不是 NA 的单元格的总和。如果您实际上有不同原点/分辨率的栅格,您可以重复这些步骤,但不需要将它们堆叠到 RasterStack 中,但您需要调整方法以同时计算 NA 细胞。

针对较小对象的简单方法:

m <- mask(s, pol)
cellStats(m, function(i, ...) sum(!is.na(i)))
# red green  blue 
# 600   506  1106 

如果内存不足,你可以这样做:

m <- mask(s, pol)
x <- reclassify(m, cbind(-Inf, Inf, 1))
names(x) <- names(m)
cellStats(x, 'sum')
#red green  blue 
#600   506  1106 

你也可以试试:

extract(s, pol, fun=function(x,...)length(na.omit(x)))
#     red green blue
#[1,] 600   506 1106

如果你想计算所有的单元格(无论 NA 与否),你可以做类似的事情

# example RasterLayer
r <- s[[1]]
# this step may help in speed if your polygon is small relative to the raster
r <- crop(r, pol)

x <- rasterize(pol, r, 1)
cellStats(x, 'sum')
#[1] 1106

关于r - 计算 R 中像素(计数)栅格文件的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50671145/

相关文章:

r - R 中按组对变量求和

r - 如何使用 `` ggplot 2`` 从数字矩阵绘制栅格

r - 在 R 中使用特定值的特定颜色绘制栅格

栅格化 sf 点的栅格输出与点不对齐

光栅图像似乎使用 R 的传单进行了移动

r - 在 R 中按颜色/子组对加权网络中的 iGraph 顶点进行分组

r - 如何在 R 中绘制日期间隔与事件之间的关系

r - 如何在正则表达式中说 (\w+\W+) 乘以 4 (R gsub)

rstudio - Rscript :为什么 UseMethod ("extract_"中的错误):在尝试使用 raster::extract 时被指示?

以 NA 作为环境凸包外区域的光栅文件