Removing only donut holes from polygons using ArcGIS Desktop?

I would try the Union tool with NO_GAPS:

NO_GAPS —A feature will be created for the areas in the output that are completely enclosed by polygons. This feature will have blank attributes.

You can then select the features with blank attributes below a threshold size and calculate their attributes to be the same as the original polygon - or copy/paste them in the Editor's Attribute window.

Features with blank attributes above the threshold size should be deleted.

From there the Dissolve tool should complete the job.


PolyGeo's solution is one I have employed myself and works well (+1). Another alternative is to buffer your polygons by a small amount and then de-buffer the result by the same amount (say +1m and then -1m). This also works well but carries a small risk of accidentally joining polygons that neighbour by the same amount as your buffer. It can also increase your vertex count (which may or may not be a problem).

You could also write a script for a robust solution by iterating over each polygon, creating temporary polygons based on the interior rings and testing these for their areas. If they are below your threshold, you then remove that interior ring from the geometry and update your row. This solution is more work than PolyGeo's solution or my buffer hack above but is possibly a "purer" approach.


You can use "Eliminate Polygon Part" tool (Data Management Tools -> Generalization) in ArcToolbox. You can specify minimum hole area/percentage to remove.