使用R自动将插入到大SpatialPolygon中的小SpatialPolygons重新分类

问题描述 投票:0回答:1

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

Raster with small polygons within larger polygons

以及在SpatialPolygons中的图2中,作为单独的多边形:Disaggregated polygons

这些多边形是按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所示:

Reclassified and aggregated final image

欢迎大家的帮助!

r k-means spatial raster sp
1个回答
0
投票

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

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

enter image description here

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

enter image description here

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

enter image description here请注意,为了使用sf包中的st_remove_holes函数,我使用了nngeo包来读取shapefile,但通常使用rastersp包。

© www.soinside.com 2019 - 2024. All rights reserved.