r - 在 R 中组合多边形并计算它们的面积(即单元格数)

标签 r r-raster

我有一个简单的光栅(用 R 包创建:光栅)。使用函数“rasterToPolygons”我得到所有包含值“1”的栅格单元的多边形:

library(raster) 
dat = list()
dat$x = seq(1.5, by = 10, len = 10)
dat$y = seq(3.5, by = 10, len = 15)
dat$z = matrix(sample(c(0,1), size = 10*15, replace = T), 10, 15)

r=raster(dat);plot(r)

r_poly = rasterToPolygons(r, fun = function(r) {r == 1}, dissolve = F)
plot(r_poly, add = T)

我不使用“dissolve = T”来避免所有多边形合并为一个大多边形。
相反,我希望获得一个新的 SpatialPolygonsDataFrame,其中所有共享一条边或一个点的多边形都被组合在一起。清晰分离的多边形应可识别为单个多边形。
基于新的 SpatialPolygonsDataFrame 我想分析组合多边形的大小如下:
b = extract(r,r_poly_new) # "r_poly_new" contains the combined polygons
str(b)                    # list of clearly separated polygons
tab = lapply(b,table)      
tab

我的问题是双重的:
1)如何组合共享边或点的多边形?
2)如何将这些信息转换成允许分析组合多边形区域的格式?
非常感谢您的反馈。

最佳答案

您可以先使用 raster::clump()识别连接的栅格单元簇,然后应用 rasterToPolygons() “多边形化”这些细胞。 (但请注意,每个丛的面积都可以直接从 RasterLayer 计算,而无需将其转换为 SpatialPolygonsDataFrame ,如下所示):

library(rgeos) ## For the function gArea

## Clump and polygonize
Rclus <- clump(r)
SPclus <- rasterToPolygons(Rclus, dissolve=TRUE)

## Check that this works
plot(SPclus, col = seq_along(SPclus))

## Get cluster areas from RasterLayer object
transform(data.frame(freq(Rclus)), 
          area = count*prod(res(Rclus)))

## Get cluster areas from SpatialPolygons object
transform(data.frame(SPclus), 
          area = gArea(SPclus, byid=TRUE))

enter image description here

关于r - 在 R 中组合多边形并计算它们的面积(即单元格数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659186/

相关文章:

R:如何在没有辅助文件的情况下将光栅写入磁盘?

R 用逻辑矩阵对向量进行子集化

r - 将 animate() 与 R 栅格中的一系列水平图一起使用

r - 使用 lapply() 和 for 循环的 VAR 模型

r - 从 tidyverse 包中消除 ungroup... 消息

R:将二进制转换为光栅文件

r - 为什么矩阵到栅格显示旋转?

r - 尝试写入或绘制光栅时 .local(object, ...) 出错

r - 更改条形图中特定条的颜色

r - 最小化重新分配个人的成本