I currently have a shapefile with 5 catagories of overlapping polygons ranked 0-4, 1 is the most recent polygon, four is the oldest and 0 is undefined.

I am looking to use ModelBuilderr to seperate this file into each of the five catagories and then merge the entire layer diplaying only the highest ranked polygon (no overlapping older/lower ranked polygons drawn) as the file has over a 1000 polygons and the goal is to speed up drawing and use the final layer as asa reference to quickly visually identify the most current file for an area.

New to ModelBuilder.

  • What license level of ArcGIS for Desktop do you have access to? – PolyGeo Oct 25 '13 at 8:41
  • Arc10.1 Advanced. – rneilson Oct 28 '13 at 20:17

Firstly run the union tool on the shapefiles. Quoting from the documentation...

Union can run with a single input feature class or layer. In this case, instead of discovering overlap between the polygon features from the different feature classes or layers, it will discover the overlap between features within the single input. The areas where features overlap will be separated into new features with all the attribute information of the input feature. The area of overlap will always generate two identical overlapping features, one for each of the features that participates in that overlap

This will create a set of identical overlapping features. You can calculate the highest rank using the dissolve tool. The dissolve tool needs a unique attribute that is the same for all the polygons within a set.

  1. Add a string column and run field calculator using the following python. This will create a unique reference for the shapes based on area, and centroid.


  2. Run the dissolve tool using the unique reference as the field. Include a maximum statistic column for your rank.
  • should be: str( !Shape_Area! ) + '-'+str(!SHAPE.CENTROID!).split()[0] + '-' + str(!SHAPE.CENTROID!).split()[1] – ericoneal Jan 22 '20 at 19:52

I suggest this workflow in ModelBuilder (in pseudo code):

  • Select ([rank]=5) --> rank5
  • Select ([rank]=4) --> rank4
  • Select Layer By Attribute ([rank]=3) --> rank3
  • Select Layer By Attribute ([rank]=2) --> rank2
  • Select Layer By Attribute ([rank]=1) --> rank1
  • Select Layer By Attribute ([rank]=0) --> rank0
  • Erase rank5 from rank4 --> diff54
  • Merge between rank5 and diff54 --> merge54
  • Erase merge54 from rank3 --> diff543
  • Merge between merge54 and diff543 --> merge543
  • Erase merge543 from rank2 --> diff5432
  • Merge between merge543 and diff5432 --> merge5432
  • Erase merge5432 from rank1 --> diff54321
  • Merge between merge5432 and diff54321 --> merge54321
  • Erase merge54321 from rank0 --> diff543210
  • Merge between merge54321 and diff543210 --> final_result

The logic consists into calculating the difference between two consecutive ranks and then merge the partial results, going from the highest rank to the lowest one.

Note: the Erase tool is available with ArcInfo license only.

  • Hi there, I have tried both sym_diff and erase tools in both ArcMap and Modelbuilder yet neither will execute subsiquent erase/sym-diff operations (ie: erase between rank 3 and merge54) – rneilson Oct 28 '13 at 20:07
  • I am pretty sure that you do not need to use Merge here. Simply do six Selects followed by five pair-wise Erases. – PolyGeo Oct 28 '13 at 21:36
  • I have just tried and the first two Select Layer By Attribute go in conflict and so the rank5 is considered empty. The remaining tools work fine instead. To avoid this kind of issue I have substituted the first two Select Layer By Attribute with two equivalent Select (the only difference is that the selection is exported as a new layer). More redundant, but it works. – Antonio Falciano Oct 29 '13 at 11:42

I had a similar problem. I was buffering street intersections, and there was quite a bit of overlap among the polygons. I finally found a way to do it through OPENJUMP. Openjump is a very simple program, but has some great features.

  1. What I did was import the vector file and first run the union.

Merge/union/dissolve in OpenJump 1

Merge/union/dissolve in OpenJump 2

  1. The next step is to polygonize the resulting union file.

Polygonize union file 1

Polygonize union file 1

You'll end up with two additional files, one containing the name of the file and union in parentheses, and the other with name (union) polygonize. Right click and save the dataset as a shapefile.

  • The question has not asked for an OPENJUMP solution, and asks specifically for a ModelBuilder one. – PolyGeo Sep 29 '15 at 22:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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