This must have been asked before, but I can't find the exact answer and my attempts so far have not worked. Most of the overlap questions I see are for calculating the area of overlap for portions of polygons or points in polygons. I want to do something that should be simpler: count overlapping polygons from separate feature classes.

I have 100 separate feature classes, each representing the occurrence of a single species. They all use the same polygon template (based on sub-watershed boundaries), meaning that when more than one species is found in an area the polygon (sub-watershed) for those species' feature classes are perfectly aligned (overlap by 100%, exactly). Note: although not as efficient for disk storage, this is how the data was provided, rather than relating tables of species data.

Example of overlaps.

Example of overlaps: Each color (blue, red dots, orange lines) each represent one species. When they overlap, e.g. red and orange, there is a perfect overlap of polygon boundaries.

What I want to do is count the number of species recorded for any given location, i.e. count the number of times a polygon overlaps and associated this with a specific polygon location. The area of overlap is not relevant in this case, just the count. With a raster, this would be equivalent to setting each layer's cells to have a value of 1, then summing. Is there a simple way to efficiently batch/automate this with 100+ vector features, without converting to raster?

So far I have tried using this count overlaps model. However, this resulted in an m-aware error, which seems unrelated. I am now running union, which has been progressing for a few hours without completing. Since I may try and run this with 1,000+ feature classes in the future, I was trying to find a more efficient way to complete the analysis. There must be a very simple way to do this, something that I am overlooking.

  • What kind of feature classes are they? Are the species occurrences point feature classes and the sub basins polygons?
    – Mike
    Jan 20 '15 at 17:22
  • The thread at gis.stackexchange.com/questions/51929/… goes beyond this: it asks how to count overlaps and then, further, rasterize the result. You don't have to do the rasterization step if you don't want to. I think that might make that thread a perfect duplicate of this one. Is there some difference in what you need to do?
    – whuber
    Jan 20 '15 at 18:27
  • Could you describe your 'sub-basin' data a bit more? Is it also vector? is each 'sub-basin' a feature (ie polygon) or a feature class? Jan 20 '15 at 18:34
  • I have edited the question to hopefully address some of these questions (apologies for the original confusion). @whuber, I have tried union, which has been running for three hours. I was trying to find a more computationally efficient way, but if it eventually completes I will close this post as a duplicate.
    – Dan
    Jan 21 '15 at 5:57
  • 1
    @whuber, I eventually had to halt the union tool, as it went into a runaway process (had written 62 GB of data, starting from the original input of only 15 MB). Seems to have been due to a mismatched extent environment automatically set by the data. Spatial join as giving higher numbers (i.e. 5, when I expected 2), so there may be an issue with the data (or I just do not understand what is going on). I will try some other alternatives, such as the points-in-polygon you suggested. Since there are 100 feature classes, it has to be iterated; union would be the fastest alternative if it worked.
    – Dan
    Jan 22 '15 at 17:50

Have you looked at Spatial Join?


Make the sub-basins the 'target features', the species polygons the 'join features' and then Spatial Join should generate a field Join_Count that simply gives the number of joins that matched each target feature.

You can join one-to-one and get the Join_Count directly. If you wanted to retain information about which species were matched to which sub-basin, you can do a one-to-many join (you end up with a record for each species) and then calculate the frequency of each sub-basin in the final table.


Not the answer you're looking for? Browse other questions tagged .