On Sun, 17 Aug 2008, Murray Richardson wrote:

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.

Did your subsequent message indicate that you had found a work-around?

If not, this reply copied from a recent posting to the statsgrass list may be relevant, using overlay() to assign grid cell centres to polygons:

library(sp)
library(maptools)
polyg <- readShapeSpatial(system.file("shapes/sids.shp",
 package="maptools")[1],  IDvar="FIPSNO",
 proj4string=CRS("+proj=longlat +ellps=clrk66"))
# the SpatialGrid is created here - if you already have one, just use it
grd <- Sobj_SpatialGrid(polyg)$SG
d <- overlay(grd, polyg)
# d contains the indices of the Polygons object into which each cell
# centre falls, or NA
summary(d)
names(polyg)
v <- polyg$SID74[d]
# use d to index the variable of interest
# if grd had been a SpatialGridDataFrame, just assign "[[<-" or "$<-",
# grd[["SID74"]] <- polyg[["SID74"]][d]
# or:
grdd <- SpatialGridDataFrame(grid=slot(grd, "grid"),
 data=data.frame(SID74=v), proj4string=CRS(proj4string(grd)))
summary(grdd)
image(grdd)
spplot(polyg, "SID74")

Roger


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
> > > > >    [email protected]
> > > > >    https://stat.ethz.ch/mailman/listinfo/r-sig-geo
> > > > > > > >


--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: [EMAIL PROTECTED]

_______________________________________________
R-sig-Geo mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to