我正在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)
我真正想要的是多边形的外边界,里面没有别的东西。有什么想法吗?
答案 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)
会产生类似
的东西
并检查一切是否合适,
plot(myCH)
plot(greece,add=TRUE)