Reverse Engineering


The standard method to remove slivers is to use the Slivers, Gaps, Overlapsfunction. In most cases this is all that is required. It is a 'brute force' procedure. It does not allow any control over which is the 'right' polygon to absorb an adjacent sliver or gap. For example, if there are two or more large polygons encompassing a sliver, which one does the sliver fit into. Nor does it allow for the controlled fixing of polygon structural problems. For this you can use a second method to clean up slivers, gaps, overlaps, and other problems. This provides contol over the final 'cleaned up' structure. The method is to reverse engineer the spatial structure. The idea is to enable you to choose between the correct line and the 'error' line that caused the problem in the first place. It works as follows; Shown below is a typical polygon structure having slivers, gaps and overlaps.

Extract the file to a polyline file with Line Extract. This produces rings that are the borders of the polygons. Portions of the borders are shared.

Run the Build Polylines tool, no tolerance is needed. This causes the rings to be intersected and new lines are created between nodes. The intersecting nodes are show.

The lines that are the borders of slivers and gaps are in pairs. Each pair spans node to node. Use the Kill Tool to delete one of these. Here you can choose which one does not belong. Having this choice allows you to undo prior errors in data capture, which caused the problems in the first place.

You could use the Feature Edit tool or the Drag tool to pull the unwanted lines away from the nodes which will have the same effect as deleting upon polygon re-build.

Run the Build Polygonstool, no tolerance is needed. Now you have a rebuilt polygon structure. But it has no attributes. For this you run the Write Attributes File-to File function to move the attributes from the original polygons to the new. Use the spatial pattern 'centroid (of original) within polygon (new)'. Or you can connect 'centroid to centroid', but you must use a small search distance since the two polygons are not exactly the same.