14

我正在 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)

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

4

2 回答 2

13

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

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

是一种非常特别的方式来为您的案例做这件事(并绘制它)。

你真正想要的是得到所有的戒指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,您会发现它适用于多个岛屿,但仍会去除一个洞。

于 2012-09-30T22:46:08.123 回答
3

如果你想要适合希腊的凸包,你可以使用包gConvexHull中的函数rgeos。请注意,如果您要处理带有孔的多边形,这不一定是采用的方法,正如我认为问题标题中的情况一样。但是,从您的示例来看,以下方法似乎可以让您到达您想要的位置。

myCH <- gConvexHull(greece)

plot(myCH)

这将产生类似的东西

在此处输入图像描述

并检查一切是否合适,

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

在此处输入图像描述

于 2012-09-30T19:46:52.787 回答