[R-sig-Geo] merge sliver polygons
Murray Richardson
murray.richardson at utoronto.ca
Fri Sep 5 18:40:51 CEST 2008
Hi Roger
I'm just getting around to trying this out.
I must say, I'm not clear on how to work with the neighbour list object
to accomplish this. Specifically, how would I identify the largest
neighbours of the sliver candidates?
Furthermore, do I first subset the polygons according to the area
threshold, and then construct the neighbour list for only these
candidate slivers? I'm not clear on how to identify neighbours for a
subset of polygons.
Sorry to bother you with this again. It will be very useful if it works
as I would also like to use it for region merging based on other attributes.
Still waiting on that book...!
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