在R中溶解多边形中的孔

时间:2012-09-30 17:15:05

标签: r gis polygons

我正在R中运行一些地理处理任务,我正在尝试创建一些用于剪切环境信息栅格的多边形。我正在缓冲一些复杂的多边形,这留下了我想摆脱的小子几何。在ArcGIS中,我认为这将涉及将多边形从多部分转换为单部分(或沿着这些部分的某些部分)然后解散,但我不知道如何在R中执行此操作。

以下是一个说明问题的示例:

require(maptools)
require(rgeos)

data(wrld_simpl)
wrld_simpl[which(wrld_simpl@data$NAME=='Greece'),]->greece
proj4string(greece)<-CRS('+proj=lonlat +datum=WGS84')
gBuffer(greece,width=0.5)->buf
plot(buf)

我真正想要的是多边形的外边界,里面没有别的东西。有什么想法吗?

2 个答案:

答案 0 :(得分:13)

如果您只想获得构成缓冲区边界的一个环,那么:

plot(SpatialPolygons(list(Polygons(list(buf@polygons[[1]]@Polygons[[1]]),ID=1))),lwd=2)

是一种非常特别的方式(针对你的情况)(<和p>)

你真正想要的是获得ringDir=1的所有戒指,因为其余的将是洞。您需要所有环,因为您的缓冲区可能仍然是两个断开连接的岛。

outerRings = Filter(function(f){f@ringDir==1},buf@polygons[[1]]@Polygons)
outerBounds = SpatialPolygons(list(Polygons(outerRings,ID=1)))
plot(outerBounds)

可能会做到这一点......尝试使用width=0.1,你会看到它适用于多个岛屿,但仍然会删除一个洞。

答案 1 :(得分:3)

如果你想要适合希腊的凸包,你可以使用gConvexHull包中的rgeos函数。请注意,如果您正在处理带有洞的多边形,这不一定是采取的方法,正如我所想的那样是问题的标题。但是,从您的示例来看,看起来下面的方法可以让您到达目的地。

myCH <- gConvexHull(greece)

plot(myCH)

会产生类似

的东西

enter image description here

并检查一切是否合适,

plot(myCH)
plot(greece,add=TRUE)

enter image description here