我想为嵌套在较大多边形中的小多边形分配与较大多边形相同的值。
在图1中,您可以看到raster
格式的小多边形:
,并在SpatialPolygons
中的图2中作为单独的多边形:
这些多边形是按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所示:
欢迎所有帮助!
答案 0 :(得分: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
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
包中的st_remove_holes
函数,我使用了nngeo
包来读取shapefile,但是我通常使用raster
和{{ 1}}包。