[R-sig-Geo] merge sliver polygons
Roger Bivand
Roger.Bivand at nhh.no
Fri Aug 15 19:20:55 CEST 2008
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
>> >
>> >
>>
>
--
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: Roger.Bivand at nhh.no
More information about the R-sig-Geo
mailing list