Don, The assumption in Polygons() is that there is at least one exterior ring, so if only one Polygon object is given, and hole is TRUE, the apparent interior ring is converted to an exterior ring. The rational is that a Polygons object is assumed to contain data, so must have an exterior ring.
Hope this helps, Roger --- Roger Bivand, NHH, Helleveien 30, N-5045 Bergen, [email protected] -----Opprinnelig melding----- Fra: [email protected] på vegne av Don MacQueen Sendt: fr 2010-02-26 02:53 Til: [email protected] Emne: [R-sig-Geo] Polygon hole=TRUE not being preserved? I'm puzzled by an apparent change of @hole from TRUE to FALSE when a Polygon object becomes part of a Polygons object. Here's an example, adapted from ?overlay r2 <- cbind(c(180042, 180545, 180553, 180314, 179955, 179142, 179437, 179524, 179979, 180042), c(332373, 332026, 331426, 330889, 330683, 331133, 331623, 332152, 332357, 332373)) r3 <- cbind( c( 179662.7, 179759.0, 180188.4, 180179.6, 179662.7), c(331630.3, 331270.5, 331428.4, 331674.1, 331630.3) ) sr2=Polygons(list(Polygon(r2)),"r2") p3 <- Polygon(r3,hole=TRUE) sr3=Polygons(list(p3),"r3") Then check: > str(p3) Formal class 'Polygon' [package "sp"] with 5 slots ..@ labpt : num [1:2] 179930 331501 ..@ area : num 148546 ..@ hole : logi TRUE ..@ ringDir: int -1 ..@ coords : num [1:5, 1:2] 179663 179759 180188 180180 179663 ... > Note that @hole is TRUE > str(sr3) Formal class 'Polygons' [package "sp"] with 5 slots ..@ Polygons :List of 1 .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots .. .. .. ..@ labpt : num [1:2] 179930 331501 .. .. .. ..@ area : num 148546 .. .. .. ..@ hole : logi FALSE .. .. .. ..@ ringDir: int 1 .. .. .. ..@ coords : num [1:5, 1:2] 179663 180180 180188 179759 179663 ... ..@ plotOrder: int 1 ..@ labpt : num [1:2] 179930 331501 ..@ ID : chr "r3" ..@ area : num 148546 @hole is now FALSE This arose because when I continue with the adapted example from ?overlay: sr=SpatialPolygons(list(sr2,sr3)) srdf=SpatialPolygonsDataFrame(sr, data.frame(i=cbind(1:2,4:3), row.names=c("r2","r3"))) And plot with plot(srdf,col='red') the red fills the entire outer polygon. I was expecting there to be a hole in the fill -- based on remembering this from last time I did this, which was *not* recent. Am I doing something wrong? Thanks -Don Session information: Sampling[327]% R --no-save --vanilla R version 2.10.1 (2009-12-14) Copyright (C) 2009 The R Foundation for Statistical Computing ISBN 3-900051-07-0 <- cut -> > sessionInfo() R version 2.10.1 (2009-12-14) i386-apple-darwin8.11.1 locale: [1] C attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] maptools_0.7-29 lattice_0.17-26 sp_0.9-57 foreign_0.8-39 loaded via a namespace (and not attached): [1] grid_2.10.1 Warning message: 'DESCRIPTION' file has 'Encoding' field and re-encoding is not possible Note, finally, that although CRAN shows sp at 0.9-60, I have installed from three different mirrors and in all cases get 0.9-57. I don't know what the issue is there. I have not (yet) tried a manual download and install of 0.9-60. I doubt that the warning message from sessionInfo() is relevant. -- -------------------------------------- Don MacQueen Environmental Protection Department Lawrence Livermore National Laboratory Livermore, CA, USA 925-423-1062 _______________________________________________ R-sig-Geo mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-sig-geo [[alternative HTML version deleted]]
_______________________________________________ R-sig-Geo mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-sig-geo
