如何在SpatialPolygonsDataFrame中向多边形添加孔?

时间:2015-04-14 10:23:00

标签: r sp

我在SpatialPolygonsDataFrame中有一个多边形列表,需要将其中一个设置为另一个中的一个洞。

我在set_Polypath的帮助下找到了如何在新创建的多边形上定义孔但是如何在现有多边形上设置“孔”标志?

1 个答案:

答案 0 :(得分:2)

看起来你必须重建多边形,然后在spdf中替换它。

以下功能自动重建添加孔的多边形:

library("sp")
AddHoleToPolygon <-function(poly,hole){
    # invert the coordinates for Polygons to flag it as a hole
    coordsHole <-  hole@polygons[[1]]@Polygons[[1]]@coords
    newHole <- Polygon(coordsHole,hole=TRUE)

    # punch the hole in the main poly
    listPol <- poly@polygons[[1]]@Polygons
    listPol[[length(listPol)+1]] <- newHole
    punch <- Polygons(listPol,poly@polygons[[1]]@ID)

    # make the polygon a SpatialPolygonsDataFrame as the entry
    new <- SpatialPolygons(list(punch),proj4string=poly@proj4string)
    new <- SpatialPolygonsDataFrame(new,data=as(poly,"data.frame"))

    return(new)
}

然后,您可以在SpatialPolygonsDataFrame中定义一个包含两个多边形的整数的多边形:

load(url("http://spatcontrol.net/CorentinMBarbu/misc/spdf.rda"))
punchedPoly <-AddHoleToPolygon(spdf[1,],spdf[2,])

得到: visualize punched polygon

然后替换spdf中的多边形

spdf <- rbind(punchedPoly,spdf[2,])
plot(spdf,col=c(1,2),main="New SpatialPolygonsDataFrames")

enter image description here