计算R中像素(计数)光栅文件的数量

时间:2018-06-03 21:29:07

标签: r raster r-raster spatial-data

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

1 个答案:

答案 0 :(得分:1)

请始终包含示例数据

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 ),您可以执行类似

的操作
local buttons = { 
      loadingScreen = { 
          bLoadingEnter = function() 
          end 
      }, ... 
}