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.
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