[R-sig-Geo] merge sliver polygons
Murray Richardson
murray.richardson at utoronto.ca
Fri Aug 15 18:51:24 CEST 2008
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.
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
>>
>>
>
More information about the R-sig-Geo
mailing list