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