12

Working in ArcMap, I have come across errors in a polygon layer that I will call "flag slivers" (taken from similar language in parcels call "flag lots"). These sliver polygons (see image below) are typically composed of just one additional node that user has accidentally added.

In the images below, the "flag" and the "flagpole" are one single-part feature where the "flagpole" just overlaps itself. The left-hand image has a total of 5 nodes.

simple flag enter image description here

When seen alone the errors are very obvious, but when multiple polygons are adjacent, they are nearly impossible to see because they appear to be the boundary between 2 polygons.

This likely happens because they are using a shapefile based editor, and therefore I cannot implement any topology-based editing rules to prevent this from happening in the future.

Does anyone have a way of identifying and resolving these types of errors? I would prefer an automated method of both identification and resolution since field users are the ones who created the errors, but I am stuck cleaning up after them. Thanks.

7
  • 3
    I wonder why Esri provides a must-not-self-intersect rule for line features, but not for polygons. Commented Sep 12, 2011 at 17:46
  • Does the Check Geometry tool find them?
    – mkennedy
    Commented Sep 13, 2011 at 1:04
  • Also search on dangle and overshoot. Both brought up some arcscripts, but nothing current and many for polylines, rather than polygons.
    – mkennedy
    Commented Sep 13, 2011 at 1:11
  • Ryan, would it be possible for you to supply a subset of your data? Also, did you by any chance investigate mkennedy's comment about the "Check Geometry" tool? Commented Sep 27, 2011 at 10:01
  • What version of arcmap? Commented Sep 27, 2011 at 14:57

7 Answers 7

5
+50

if you have access to Safe Fme tools you will find useful the transformer called spikeRemover, give it a look. You may try a downloadable limited version of SAFE FME or check your ArcGis license for "FME Extension for ArcGIS"

http://docs.safe.com/fme/html/FME_Transformers/Default.htm#Transformers/spikeremover.htm

http://cdn.safe.com/resources/fme/FME-Transformer-Reference-Guide.pdf

1
  • I was able to successfully use the SpikeRemover within the ArcGIS Data Interop extension in order to clean up the spikes. It also has outputs that allow you to specify unchanged, changed, and flagged (spikes) features. All of these came in really handy in identifying the features that had spikes, and creating a new "spikeless" layer was very easy by simply posting both the unchanged and changed outputs to the same layer, and the "flagged" output to a QC layer for further inspection. esri.com/software/arcgis/extensions/datainteroperability/… Commented Oct 4, 2011 at 20:08
2

I'm not sure where your problem occurs, or where you have the possibility to avoid/fix it. But I've seen this a lot in our SDE-database although geometries in SDE should always be correct. In our case it was because we imported shapefiles using ArcObjects into the SDE. When the geometries was stored they snapped to the grid of the SDE and thus created incorrect geometries with the slivers you describe when the geometry had a thin spike. This because shapefiles have full double precision for the coordinates and the SDE a coarser grid.

Our solution was to fix the geometries when they were imported by:
1. Set the spatial reference of the geometry from the shapefile to the spatial reference of the corresponding SDE feature class
2. Snap the geometry to the spatial reference (IGeometry.SnapToSpatialReference())
3. Set ITopologicalOperator2.IsKnownSimple=false (important, otherwise simplify doesn't do anything)
4. Perform some simplify operation. For polygons we used IPolygon.SimplifyPreserveFromTo()

2

With arcmap 9.3.1, I would add a field called Flag (or maybe FlagFlag?) and use VBA code in the field calculator to calculate this field.

The VBA code would dim a variable as ITopologicalOperator3 and set it to the Shape field.

It would then call the not-so-simple IsSimpleEx method.

Set the Flag field value to the esriNonSimpleEnum. Presumably the error you are concerned with would return esriNonSimpleSelfIntersections.

With 10.0 there may be a way to do this with python in the calculator (?) ... I'm not sure. I would use an add-in command. IMO Esri should provide support for c# in the field calculator. After all, the c# compiler is installed as part of the .NET framework.

Update

The code I posted here might find flag poles if you apply a Definition expression "Left_OID" = "Right_OID" to the resulting polyline featurelayer.

1

This Python Script is a handy tool

Eliminate sliver polygons from shapefiles

"EliminateSlivers.py cycles through all features in a polygon shapefile and removes the ones from the output shapefile that fall below a given area threshold.

Geoprocessing operations and cluster tolerances could result in the build up of extra, tiny sliver polygons. These may be meaningless and could distort the reliability of the spatial data."

Note: you will have to test with different tolerances with your data (take a copy of your data first)

http://arcscripts.esri.com/details.asp?dbid=14672

2
  • 1
    It was easy with ArcInfo Coverages >Clean Arcs >Build Polygons....
    – Mapperz
    Commented Sep 12, 2011 at 19:14
  • I'm not sure that this tool would actually eliminate the errors I am depicting. You see, the sliver (flagpole) and the main body of the polygon (flag) are actually one feature. Therefore this script would not ONLY remove the "flagpole" portion of the polygon without removing the entire "flag" feature at the same time. Commented Sep 12, 2011 at 20:08
1

Ryan,

I worked with Soil Survey office, and I periodically checked their soil polygons. What I do is checked for slivers. I would sent the featureclass to coverage and then build them to label to identify the errors. If you see 2 labels in one polygon, it is an error. If it is one label per polygon, you know it is correct. I would create a featureclass as a point to mark an error. Or you can select a or many labels into a new featureclass. This way you can come back and fix the error. It works for me very well with the soil polygons. I use that to inform soil scientists to fix the problem.

That is just mine of way to identify the problem. Just sharing that with you.

1

If the identification is not a major point and just the automated fix try this. Add the data to a new blank Map Document, then ;

  • Create a Map Topology
  • select all features
  • use the construct features to split existing features

I have tested this and it seems to work but I am unsure if I have exactly replicated your data source

Have Fun, CDB

1

Here we go there are a few ways of working through this and in my opinion the most elegant is using an Extension called GIS Data Reviewer. GIS data Reviewer allows you to create customised and simplified checks on spatial and attribute accuracy in addition to core Topology. Within Topology there are things that are not available that are part of the standard checks for Data Reviewer Like

  • 3D Closure
  • Invalid Hole
  • SQL Expression
  • Area less than Spatial Reference
  • Feature on Feature
  • and many more

I would use this to interrogate your data. Another way to go is to create a new feature class based upon your existing polygon feature class. and then create a new Polygon feature class and populate it with the lines using the construct features tool in the Topology Toolbar. This would then mean that the slivers should then show as such and any other topology tools should pick up the error. Then it is a matter of selecting, deleting and replacing the features in the existing feature class.

Hope this helps, CDB

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.