使用 R 自动重新分类插入大型 SpatialPolygons 的小型 SpatialPolygons

Automatically reclassify small SpatialPolygons inserted into large SpatialPolygons using R

我想为嵌套在较大多边形中的小多边形分配与较大多边形相同的值。 在图 1 中,您可以看到 raster 格式的小多边形:

和图 2 中的 SpatialPolygons 作为单独的多边形:

这些多边形是按 k 均值排序、生成栅格并使用 rasterFromXYZ 函数(下面的代码)的结果:

mydata.26.raster <- rasterFromXYZ(as.data.frame(mydata.26.coord[,c("x", "y",       "cls_26.cluster")]),res=5, crs=crs)

然后 rasterToPolygons 函数我能够分离多边形(下面的代码):

zona.26.pol<- rasterToPolygons(zona.26.raster$cls_26.cluster,dissolve=TRUE)
zona.26.pol <- disaggregate(zona.26.pol)

这里是zona.26.pol如果你想帮忙它是.shp格式。

我手动对多边形进行了重新分类,最后使用相同的 类 添加了它们。 我手动赋值后,我想自动实现(创建规则)的结果如图3:

欢迎大家的帮助!

这将仅根据大小移除嵌套的小多边形,然后移除较大的剩余多边形中留下的孔洞。这适用于您的示例,但如果您要删除的嵌套多边形较大,则可能会失败。在那种情况下,我们将不得不弄清楚如何识别 'nested'

的几何图形
library(sf)
library(units)
library(nngeo)
min_polygon_area  <- 10000 #set minimum size of a nested polygon you would like to remove
units(min_polygon_area) <- as_units('m^2') #as defined below by st_area
zona.26.pol <- st_read(file.path(workDir, 'zona.26.pol.shp'))
st_crs(zona.26.pol) <-  '+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs' #define crs
zona.26.pol$area <- st_area(zona.26.pol)
zona.26.pol$area #note area is in m^2
plot(zona.26.pol[,'cls_26_']) #as-is plot

zona.26.pol <- zona.26.pol[zona.26.pol$area>min_polygon_area, ]
plot(zona.26.pol[,'cls_26_']) #small polygons removed; holes remaining

zona.26.pol_no_holes <- st_remove_holes(zona.26.pol)
plot(zona.26.pol_no_holes[,'cls_26_']) #holes removed

请注意,我使用 sf 包来读入 shapefile,以便利用 nngeo 包中的 st_remove_holes 函数,但我通常使用 rastersp包。