Identifying Long and Narrow Features

1633
2
04-04-2012 11:24 AM
SN
by
New Contributor
I am writing a Python script and would like to remove long, narrow features from a polygon feature class.  Ideally, I would also like to remove long, narrow portions of features as well. 

See the attached image for examples of these types of features.
[ATTACH=CONFIG]13256[/ATTACH]

As a starting point, I have tried doing feature area to envelope area ratios and feature area to feature perimeter ratios, which identify some of the features.  Is there a more robust way to do this, either with geoprocessing tools or by using performing operations on the geometry itself?

Any help is appreciated..
Thanks.
Tags (2)
0 Kudos
2 Replies
curtvprice
MVP Esteemed Contributor
As a starting point, I have tried doing feature area to envelope area ratios and feature area to feature perimeter ratios, which identify some of the features.


You're on the right track as the area / perimeter ratio is a time-tested approach to select polygons for removal using the Eliminate tool. (I'm thinking back to the original ARC/INFO ELIMINATE command back in the 1980s.)  Unfortunately the "cutoff" you use is highly data and processing flow dependent.... it really depends on your data and trial and error is the only sure fire way to get what you want.

Your picture looks like polygons that started out life in the raster domain (albeit projected) so I would be remiss not to mention that there is a raster approach to this using the tools Region Group, Zonal Geometry, and Nibble. A raster approach may be much more efficient than the vector equivalent because of the inherent benefits of the raster data model. If you want to remove "long, narrow" parts of your area features, there are raster tools will suited to that as well. In fact, that would be much easier to do in raster. See the help for the Generalization toolset for more information.
0 Kudos
markdenil
Occasional Contributor III
You could do a polygon generalization.
Buffer the polygons with a negative buffer value, then buffer the buffers with a positive buffer of the same distance. That will collapse and remove the long skinny bits and eliminate the ones that are just long and skinny.

(That could be proceeded or followed with a positve-then-negative buffering)

You perform this on each polygon in an fc by itself, so you don't get collisions.

It will also smooth the rest of the remaining polygon, which you may or may not like so much.

Rasterizing and nibbleing may be a better option.
0 Kudos