首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >计算R中的像素(计数)栅格文件数

计算R中的像素(计数)栅格文件数
EN

Stack Overflow用户
提问于 2018-06-03 21:29:07
回答 1查看 9K关注 0票数 2

我有大量的光栅文件和一个在光栅文件范围内的多边形。我想要获取多边形内每个光栅文件的像素数(计数)。另外,我想创建一个表格,其中包含光栅文件的名称和每个光栅文件的像素数(列出)。我已经尝试了堆叠,但我不能保持跟踪的名称。在R中有没有其他方法来执行这个任务?

EN

回答 1

Stack Overflow用户

发布于 2018-06-04 18:01:54

请始终包含示例数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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像元。

较小对象的简单方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m <- mask(s, pol)
cellStats(m, function(i, ...) sum(!is.na(i)))
# red green  blue 
# 600   506  1106 

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m <- mask(s, pol)
x <- reclassify(m, cbind(-Inf, Inf, 1))
names(x) <- names(m)
cellStats(x, 'sum')
#red green  blue 
#600   506  1106 

您还可以尝试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extract(s, pol, fun=function(x,...)length(na.omit(x)))
#     red green blue
#[1,] 600   506 1106

如果您想计算所有的单元格(无论是否为NA ),您可以这样做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50671145

复制
相关文章

相似问题

用redux响应本机axios api调用

21

Axios调用中的Joi验证没有给出正确的响应

111

用Axios返回具有多个响应的数组

13

用Axios和承诺循环API调用

24

如何使Axios用Rails调用json响应?

31
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文