问题
Edit:
As suggested by Edzer Pebesma in the comments, the recommended method to add a hole to a polygon is not to modify the slot but to rebuild the polygon, as illustrated in this related question.
Original question
Following the help of SpatialPolygons-class
I tried to modify a polygon to be a hole of an other polygon but while the "hole polygon" is displayed as a border of the other polygon, its inside is colored as the rest.
What am I doing wrong?
Using defPunched
and defHole
defined here:
library("sp")
load(url("http://spatcontrol.net/CorentinMBarbu/misc/holeIssue.rda"))
defHole@polygons[[1]]@Polygons[[1]]@hole<-TRUE
OnePolDFToPolygon <- function(x){
main <- x@polygons[[1]]@Polygons[[1]]
return(main)
}
punch <- Polygons(list(OnePolDFToPolygon(defPunched),OnePolDFToPolygon(defHole)),defPunched@polygons[[1]]@ID)
mine <- SpatialPolygons(list(punch),proj4string=defPunched@proj4string)
mine <- SpatialPolygonsDataFrame(mine,data=as(defPunched,"data.frame"))
plot(mine,col="blue",border="green")
回答1:
Holes are supposed to have the opposite ring direction, e.g. by
mine@polygons[[1]]@Polygons[[2]]@coords = mine@polygons[[1]]@Polygons[[2]]@coords[5:1,]
plot(mine, col = 'blue')
you get the plot below. Where did this data come from?
来源:https://stackoverflow.com/questions/29629049/how-to-modify-a-polygon-to-be-a-hole-spatialpolygons-changing-its-slots