[R-sig-Geo] SpatialPolygons to SpatialGrid

Murray Richardson murray.richardson at utoronto.ca
Mon Aug 18 04:35:27 CEST 2008


Thanks again Roger - I see about the slopes assignment.  I'm just 
learning how to work with these spatial objects.  That should make them 
very nice to work with actually, glad to realize this.

I don't suppose there is any way to go from SpatialPolygons to a 
SpatialGrid is there?  I'm having a problem using the shapes to  grid 
function in SAGA via RSAGA geoprocessor, although most functions are 
working very well for me otherwise.  There is a problem with the SAGA 
source code it seems.  Essentially I need a relatively rapid conversion 
from a shapefile to a SpatialGridDataFrame (i.e. something not too 
computationally intensive) as I am having to do some expensive 
formatting to make things work via RSAGA.

Thanks again,

Murray


Roger Bivand wrote:
> On Fri, 15 Aug 2008, Murray Richardson wrote:
>
>> Oh maybe I've misunderstood the function.
>>
>> I am using unionSpatialPolygons to dissolve boundaries between 
>> adjacent polygons that have a similar attribute (I use cut to 
>> classify the ID into say, 10 different categories), i.e.:
>>
>> x<-readShapePoly("up1polys", IDvar="ID")
>> slopes<-slot(x[(1:length(slot(x, "polygons"))),3], "data")
>> breaks<-c(0,5,10,20,30,40,50,60,70,100)
>> ID <- cut(slopes[,1], breaks)
>> sptmp <- unionSpatialPolygons(x, ID)
>> newID<-data.frame(c(1:length(slot(sptmp, "polygons"))))
>> merged<-SpatialPolygonsDataFrame(sptmp, data=newID, match.ID=FALSE)
>> writePolyShape(merged, "up1merged", factor2char = TRUE, max_nchar=254)
>>
>> So I am just using unionSpatialPolygons as a dissolve tool but I 
>> would like non-adjacent polys within the same slope class to be 
>> separate polygons when I'm done.
>
> The ID argument groups all, both contiguous and so merged, and 
> non-contiguous, Polygon objects in the same Polygons object. So if you 
> don't want them merged, only set the same ID values for the slivers to 
> be joined, merge the polygons, then go on and do the other things.
>
> Your assignment to slopes is very strange. What does names(x) say? If 
> the third one is "slopes", why not just say x$slopes? The object does 
> behave just like a data.frame, after all. I think that you need to do 
> things strictly step by step, do the slivers first, then associate the 
> correct attributes with the output polygons.
>
> Roger
>
>>
>> Thanks again
>>
>> Murray
>>
>>
>> Roger Bivand wrote:
>>>  On Fri, 15 Aug 2008, Murray Richardson wrote:
>>>
>>> >  Thanks for this Roger.
>>> > >  One other thing now...if I use unionSpatialPolygons as a 
>>> dissolve tool, >  is there a way to then explode distinct polygons 
>>> back to individual >  polygons? i.e. once all the slivers are gone 
>>> and I have polygons merged >  based on attributes, the result is a 
>>> multipart polygon for each ID I >  used for the merge, but I need 
>>> them back as separate polys.
>>>
>>>  Each unique ID value should give a separate Polygons object, so 
>>> look at
>>>  the ID vector before going into unionSpatialPolygons() to make sure it
>>>  does what you want.
>>>
>>>  Roger
>>>
>>> > >  Thanks
>>> > >  Murray
>>> > > > >  Roger Bivand wrote:
>>> > >   On Wed, 13 Aug 2008, Murray Richardson wrote:
>>> > > > > >   Hello again r.sig.geo list,
>>> > > > >   Thanks Roger, for help on my previous question regarding > 
>>> > iterating >   through a shapefile.
>>> > > > >   I'm sure once I receive my copy of  "Applied Spatial Data 
>>> > >  Analysis with >  R" I will find answers to simple questions 
>>> like this > >  on my own, but in >  the meantime....
>>> > > > >   Is it possible to merge sliver polygons that fall below a 
>>> > >  certain >  threshold area with adjacent neighbours (e.g. 
>>> perhaps using > >  >  unionSpatialPolygons but without aggregating 
>>> any  polygons?).  If a > >  >  sliver shares edges with more than 
>>> one polygon, it doesn't really > >  matter >  which one it merges 
>>> with, but if I had to choose a rule I > >  would have it >  merge 
>>> with the largest one.
>>> > > > >   Not such a simple question ...
>>> > > > >  Both the Polygon and Polygons objects in the 
>>> SpatialPolygons object > >  have
>>> > >   "area" slots, with different roles. The Polygon objects have a 
>>> > >   correct
>>> > >   naive area in the geometry of the coordinates taken as planar. 
>>> The
>>> > >   Polygons objects use the "gross" area of Polygon objects 
>>> belonging to
>>> > >   them, but "only" to provide the plot order (plot from largest 
>>> to > >  smallest
>>> > >   to avoid over-painting).
>>> > > > >   If you "trust" the area slot of the Polygons objects 
>>> (beware of hole
>>> > >   Polygon objects), you can first find your candidate slivers by 
>>> > >  retrieving
>>> > >   the areas by:
>>> > > > >   Polygons_areas <- sapply(slot(SPobj, "polygons"),
>>> > >     function(x) slot(x, "area"))
>>> > > > >  and set a cutoff. Then use poly2nb(SPobj, queen=FALSE) in 
>>> spdep to > >  find
>>> > >  the neighbours (rook criterion). Next use the output object to 
>>> > >  identify
>>> > >   the largest neighbours of the sliver candidates, and build a "new
>>> > >   Polygons" ID vector. Finally, use unionSpatialPolygons(). I'm 
>>> > >  assuming you
>>> > >   wouldn't have asked if there was useful data in the slivers!
>>> > > > >   Hope this helps,
>>> > > > >   Roger
>>> > > > > > >   Thanks in advance,
>>> > > > >   Murray Richardson
>>> > > >
>>>>>> _______________________________________________
>>> > > >   R-sig-Geo mailing list
>>> > > >   R-sig-Geo at stat.math.ethz.ch
>>> > > >   https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>> > > > > >
>>
>




More information about the R-sig-Geo mailing list