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