[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