I'm trying to find the best way to only get the inner overlap of multiple polygons within the same feature class. I've tried the Union/Dissolve method as well as the Intersect tool and can't get the desired result I want. My sense is that I may need to create some kind of topology rule to do it, but ostensibly I just want to find the inner areas where the polygons overlap and right now the software is selecting ANY polygon that overlaps with another. I've attached an annotated picture to show my challenge.
-
Intersect will output only where you have overlap. You can input a single or multiple featureclasses.– klewisApr 5, 2017 at 15:45
-
Thanks, I understand that. As I mentioned, it's only one feature class, but as you can see from the picture, it's returning the outer portion of the overlapping feature in some cases, but not all of them. I only desire the inner portion of the polygon overlap. This was the result from using the Intersect tool, but I tried the Union/Dissolve method and got the same result....– NickWissApr 5, 2017 at 15:51
-
@NickWiss The Intersection tool "should" work how you want it to work, even when working with one feature class. But, if that isn't working I would expect running a topology, looking for overlaps, would also get you what you need. You can then convert the topology to a feature class, though you won't have any attributes.– danielmApr 5, 2017 at 18:20
1 Answer
I was just working on this very issue. This is the way I was able to get this to work. Union was the right way to go. After that I went through each feature and select by location all the features from the original that contains the Union feature. If the desired number of selected features is returned, create a new feature class. Merge all the feature classes when complete.
Because the union feature class could contain a large number of features, doing this programmatically is the way I went. I used a variation of the following python code.
import arcpy
from arcpy import env
arcpy.env.workspace = "path/to/data"
shp = "shp.shp"
arcpy.MakeFeatureLayer_management(shp,"shpLayer")
arcpy.Union_analysis("shpLayer","shp_Union.shp")
for feat in arcpy.da.SearchCursor(ushp,"FID"):
arcpy.MakeFeatureLayer_management(ushp,"ulayer",''' "FID" = %i ''' %int(feat[0]))
arcpy.SelectLayerByLocation_management("shpLayer","CONTAINS","ulayer")
if laycount >= 3: #specifies the number of overlaps desired
arcpy.CopyFeatures_management("ulayer","%i.shp"%int(feat[0]))
arcpy.Delete_management("ulayer")
dlist.append("%i.shp"%int(feat[0]))
else:
arcpy.Delete_management("ulayer")
arcpy.Merge_management(dlist,os.path.join(shpdir,"Merge_Features.shp"))
for d in dlist:
arcpy.Delete_management(d)