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,
Roger.Bivand@nhh.no



-----Opprinnelig melding-----
Fra: r-sig-geo-bounces@stat.math.ethz.ch på vegne av Don MacQueen
Sendt: fr 2010-02-26 02:53
Til: r-sig-geo@stat.math.ethz.ch
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
R-sig-Geo@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo


	[[alternative HTML version deleted]]

