[R-sig-Geo] extracting polygons

Agustin Lobo Agustin.Lobo at ija.csic.es
Thu Apr 10 08:17:43 CEST 2008


Andrew,

I get the same behaviour,
 > delme <- faigcell2(datafr=absUTM)
 > str(delme,max.level=2)
Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
   ..@ data       :'data.frame': 69 obs. of  3 variables:
   ..@ polygons   :List of 69
   ..@ plotOrder  : int [1:69] 1 2 3 4 5 6 7 8 9 10 ...
   ..@ bbox       : num [1:2, 1:2]  412000 4584000  466000 4624000
   .. ..- attr(*, "dimnames")=List of 2
   ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots

 > as.owin(delme at polygons[[1]])
Error in as.owin.default(delme at polygons[[1]]) :
   Can't interpret W as a window
 > class(delme at polygons[[1]])
[1] "Polygons"
attr(,"package")
[1] "sp"

where faigcell2() includes your suggestion instead of the original lines.

The following works (as for the result of the original faigcell()):
 > class(SpatialPolygons(delme at polygons[1]))
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"
 > as.owin(SpatialPolygons(delme at polygons[1]))
window: polygonal boundary
enclosing rectangle: [418000, 420000] x [4590000, 4592000] units

The point is, I would expect the components of an 
SpatialPolygonsDataFrame to be SpatialPolygons, not just Polygons.

Agus

Andrew Niccolai escribió:
> I think there may be an issue in your faigcell function for your lines:
> 
>     Sr1 <- Polygon(cbind(c(nwx,nex,sex,swx,nwx), c(nwy,ney,sey,swy,nwy)))
>     Sr1 <- Polygons(list(Sr1), datafr[i,1])
>     lista[i] <- Sr1
> 
> try instead:
> 
>     Sr1 <- list(Polygons(list(Polygon(cbind(c(nwx,nex,sex,swx,nwx),
> c(nwy,ney,sey,swy,nwy)))), datafr[i,1]))
>     lista[i] <- Sr1
> 
> I can't be sure if that will work as I tend to iteratively claw my way to
> successful code but the trick lies somewhere in setting up the
> Polygons/Polygon lists.
> 
> Andrew Niccolai
> Doctoral Candidate
> Yale School of Forestry
> 
> 
>  
> 
> -----Original Message-----
> From: r-sig-geo-bounces at stat.math.ethz.ch
> [mailto:r-sig-geo-bounces at stat.math.ethz.ch] On Behalf Of Agustin Lobo
> Sent: Tuesday, April 08, 2008 12:56 PM
> Cc: r-sig-geo at stat.math.ethz.ch
> Subject: Re: [R-sig-Geo] extracting polygons
> 
> I think that (at least part of) my problem comes
> from being confused about Polygons and SpatialPolygons.
> (and [ and [[ !!!)
> 
> I have an object with all my polygons:
> 
>  > class(absUTMpolys)
> [1] "SpatialPolygonsDataFrame"
> attr(,"package")
> [1] "sp"
> 
>  > str(absUTMpolys,max.level=2)
> Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
>    ..@ data       :'data.frame': 69 obs. of  3 variables:
>    ..@ polygons   :List of 69
>    ..@ plotOrder  : int [1:69] 1 2 3 4 5 6 7 8 9 10 ...
>    ..@ bbox       : num [1:2, 1:2]  412000 4584000  466000 4624000
>    .. ..- attr(*, "dimnames")=List of 2
>    ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
> 
> how is it that an SpatialPolygonsDataFrame has polygons instead
> of SpatialPolygons?
> 
> Well, I've created absUTMpolys with:
> absUTM <- read.table("poblptXsans_absents.txt",header=T)
> absUTMpolys <- faigcell(datafr=absUTM)
> 
> where faigcell() is a function I've made:
> 
> "faigcell" <- function(datafr=absUTM)
> {
>    require(sp)
>    lista <- vector(length=nrow(datafr),mode="list")
>    names(lista) <- datafr[,1]
>    for(i in 1:nrow(datafr)){
>     swx <- datafr[i,5]
>     swy <- datafr[i,8]
>     sex<- swx + 2000
>     sey <- swy
>     nex <- sex
>     ney <- sey+2000
>     nwx <- swx
>     nwy <- ney
>     Sr1 <- Polygon(cbind(c(nwx,nex,sex,swx,nwx), c(nwy,ney,sey,swy,nwy)))
>     Sr1 <- Polygons(list(Sr1), datafr[i,1])
>     lista[i] <- Sr1
>     }
>    datos <- cbind(datafr[,1:2],abnd=rep(0,nrow(datafr)))
>    row.names(datos) <- datafr[,1]
>    Sr<- SpatialPolygons(lista,pO=1:nrow(datafr),CRS("+proj=tmerc 
> +lat_0=0 +lon_0=2.999999982811267 +k=0.999600 +x_0=500000 +y_0=0 
> +ellps=intl +units=m +no_defs"))
>    SpatialPolygonsDataFrame(Sr, data=datos, match.ID = TRUE)
> }
> 
> Note that Sr is made using SpatialPolygons(), and then I use 
> SpatialPolygonsDataFrame() with Sr. Why don't I have SpatialPolygons
> within absUTMpolys ?
> 
> The problem is that I need SpatialPolygons to get as.owin to work.
> 
> I've found that I can do:
> as.owin(SpatialPolygons(absUTMpolys at polygons[1]))
> 
> and it works, but is this not very weird? should not the following just 
> work:
> 
> as.owin(absUTMpolys at polygons[[1]])
> ?
> 
> That is, instead of having polygons:
>  > class(absUTMpolys at polygons[[1]])
> [1] "Polygons"
> attr(,"package")
> [1] "sp"
> 
> why don't I have SpatialPolygons?
> 
> Than
> 
> Agus
> 
> 
> 
> Agustin Lobo escribió:
>> Dear list,
>>
>> I want to distribute a set of N circles according to a random distribution
>> within a set of polygons (N circles within each polygon).
>>
>> I have an object of class SpatialPolygonsDataFrame with the polygons.
>>
>> My idea is to use something like:
>>
>> for (i in 1:length(absUTMpolys at polygons)){
>>  delme <- runifpoint(3, win=as.owin(absUTMpolys at polygons[i]))
>>  ...
>>
>> but I'm not being successful at extracting each polygon and
>> as.owin refuses the conversion:
>>
>> I've tried
>>  > as(absUTMpolys at polygons[1], "owin")
>> Error in as(absUTMpolys at polygons[1], "owin") :
>>   no method or default for coercing "list" to "owin"
>>
>> and
>>  > as(absUTMpolys at polygons[1][[1]], "owin")
>> Error in as(absUTMpolys at polygons[1][[1]], "owin") :
>>   no method or default for coercing "Polygons" to "owin"
>>
>>
>> which is the proper way
>> of selecting each polygon from within the SpatialPolygonsDataFrame
>> object?
>>
>> Thanks!
>>
>> Agus
>>
>>
> 

-- 
Dr. Agustin Lobo
Institut de Ciencies de la Terra "Jaume Almera" (CSIC)
LLuis Sole Sabaris s/n
08028 Barcelona
Spain
Tel. 34 934095410
Fax. 34 934110012
email: Agustin.Lobo at ija.csic.es
http://www.ija.csic.es/gt/obster




More information about the R-sig-Geo mailing list