首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建包含特定栅格值的面

创建包含特定栅格值的面
EN

Stack Overflow用户
提问于 2017-07-12 05:24:00
回答 1查看 649关注 0票数 0

我在一个栅格堆栈中包含4个栅格层,并希望生成包含指定值的所有单元格的多边形。

raster包可用于生成示例数据集。

代码语言:javascript
复制
library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)

像下面的栅格一样,我的真实数据类似于动物栖息地的地图,并且有一个“好”和“坏”区域的零星分布。

为了更贴近地反映我的真实数据,我们可以向其他三个栅格添加一点变化,并形成一个堆栈。

代码语言:javascript
复制
s <- stack(r, r+250, r-250, r+100)

使用堆栈s,是否可以创建包含所有堆栈层中小于300的所有单元的多边形?

作为扩展,我的最终目标是计算结果多边形之间的面积(或百分比)重叠。

任何建议(具体的或一般的)都将非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 18:54:14

因为你使用的是栅格堆栈,所以你所有的单元格都应该有相同的面积。在这种情况下,我认为你根本不需要使用多边形。(请注意,我对示例数据进行了一些调整。)

代码语言:javascript
复制
library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
s <- stack(r, r + 50, r - 50, r + 100)

# Create a new raster stack with results of a logical test
s2 <- s < 300

# Create a raster indicating which cells of the new stack
# have values that are all TRUE
r2 <- sum(s2) == length(unstack(s2))
# Multiply by the area of a single cell
r3 <- r2 * area(r2)[1]

# Sum the area for all raster values
sum(values(r3), na.rm = TRUE)
## 124800

如果你想使用多边形,并且你的栅格不是太大,那么将堆栈转换为SpatialPolygonsDataFrame应该是相当快的。下面是一个产生相同结果的类似方法:

代码语言:javascript
复制
# Create a new raster stack with results of a logical test
s2 <- s < 300

# Convert to sp object
spdf <- as(s2, "SpatialPolygonsDataFrame")

# Index to the rows/features where the values in s2 were all TRUE
spdf2 <- spdf[which(rowSums(spdf@data) == length(unstack(s))), ]

rgeos::gArea(spdf2)
## 124800
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45044706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档