1

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.

enter image description here

3
  • Intersect will output only where you have overlap. You can input a single or multiple featureclasses.
    – klewis
    Apr 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....
    – NickWiss
    Apr 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.
    – danielm
    Apr 5, 2017 at 18:20

1 Answer 1

1

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)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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