创建包含特定栅格值的多边形
Create polygons encompassing specific raster values
我在栅格堆栈中包含 4 个栅格图层,并且想要生成包含具有指定值的所有像元的多边形。
raster
包可用于生成示例数据集。
library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
就像下面的栅格一样,我的真实数据类似于动物栖息地的地图,并且有 'good' 和 'bad' 区域的零散分布。
为了更接近地反映我的真实数据,我们可以向其他三个栅格添加一些变化并制作一个堆栈。
s <- stack(r, r+250, r-250, r+100)
使用堆栈 s
是否可以创建围绕所有堆栈层中小于 300 的所有单元格的多边形?
作为扩展,我的最终目标是计算生成的多边形之间的面积(或百分比)重叠。
任何建议(具体或一般)将不胜感激。
由于您使用的是栅格堆栈,因此所有像元都应具有相同的面积。在那种情况下,我认为您根本不需要使用多边形。 (请注意,我稍微调整了您的示例数据。)
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
应该会非常快。这是产生相同结果的类似方法:
# 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
我在栅格堆栈中包含 4 个栅格图层,并且想要生成包含具有指定值的所有像元的多边形。
raster
包可用于生成示例数据集。
library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
就像下面的栅格一样,我的真实数据类似于动物栖息地的地图,并且有 'good' 和 'bad' 区域的零散分布。
为了更接近地反映我的真实数据,我们可以向其他三个栅格添加一些变化并制作一个堆栈。
s <- stack(r, r+250, r-250, r+100)
使用堆栈 s
是否可以创建围绕所有堆栈层中小于 300 的所有单元格的多边形?
作为扩展,我的最终目标是计算生成的多边形之间的面积(或百分比)重叠。
任何建议(具体或一般)将不胜感激。
由于您使用的是栅格堆栈,因此所有像元都应具有相同的面积。在那种情况下,我认为您根本不需要使用多边形。 (请注意,我稍微调整了您的示例数据。)
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
应该会非常快。这是产生相同结果的类似方法:
# 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