使用 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
函数,但我通常使用 raster
和 sp
包。
我想为嵌套在较大多边形中的小多边形分配与较大多边形相同的值。
在图 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
函数,但我通常使用 raster
和 sp
包。