gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:51:14 24 4
gpt4 key购买 nike

我有一个简单的光栅(用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com