How to modify a polygon to be a hole (SpatialPolyg

2019-02-26 06:52发布

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")

enter image description here

标签: r spatial sp
1条回答
Emotional °昔
2楼-- · 2019-02-26 07:28

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?

enter image description here

查看更多
登录 后发表回答