计算边界框中的栅格值(空间范围)


11

给定一个边界框,如何计算value == 11)arcpy或2)R中的栅格数据包中特定值的数量(例如,我对的数量感兴趣)?

Answers:


10

在中R,用于crop提取值,并(例如table对它们进行计数。


作为示例,让我们创建一个覆盖地球的1度网格:

library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)

边界框将转换为extent对象以使用crop

y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)

完成后,制表很简单:

table(getValues(y.raster))

在此输出中,第一行列出了值,第二行列出了它们的相应计数:

165 166 167 ... 257 258
  1   2   3 ...   2   1

作为检查,我们可以绘制栅格和范围:

plot(x.raster)
plot(y.extent, add=T)

地图


3

较小的补充:您还可以使用(内存安全)函数“ freq”:

按照胡布的答案:

library(raster)
x.raster <- raster(outer(179:0, 0:359, '+'), xmn=-180, xmx=180, ymn=-90, ymx=90)
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)

但是现在做:

freq(y.raster)

仅对非常大的对象(文件上的栅格)有意义。“ freq”返回一个两列的矩阵(值/计数),而“ table”返回一个表。


反正只是执行空间查询而不是裁剪图像?裁剪对于处理而言可能非常慢。
看到

1
播种应该非常快。作为测试,我将crop操作时间定为覆盖地面的一分钟网格:它具有10800行和21600列(233,280,000个单元)。在总耗时1.36秒内执行了裁剪。
ub

我也认为它应该很快,但是您可以将以上内容与该空间查询进行比较:v <- extract(x.raster, y.extent) 随后 table(v)
罗伯特·希曼斯

1
罗伯特,什么图书馆extract来自?这不是一部分rasterR帮助系统(??)未找到这个名字任何函数。
ub

它是光栅包中的函数。提取显示(至少对我而言如此)
罗伯特·希曼斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.