0

I have one shapefile layer containing thousands of polygons, each represents either a historic or current reclamation project (*Note: Overlapped does not equal to repetitive). I now intend to identify and group all polygons that are highly overlapped with one another (for instance, if two or three polygons are spatially overlapped and their areas are quite similar or the same), then assign a common "family" value in a new field/ column indicating which highly overlapped polygons belong to which groups.

How may I implement this operation in ArcMap?

Below is an example: there is one selected polygon while two other polygons that are almost the same are beneath the selected one. The selected one is the land's most recent project, the other two's are historic projects (so the land has been used for total 3 times) . And I want to assign these three polygons a common value indicating such relationship.

enter image description here

5
  • In the case of ArcGIS, you could use Python to compare the geometries (loop through all features, and for each feature's geometry, loop through all the other features, to compare all geometries against each other). You can use the geometry class' intersect() method to get a geometry representing the intersection of the two geometries being compared, and then compare the original geometry's area property with the area property of the intersection geometry. See: desktop.arcgis.com/en/arcmap/latest/analyze/arcpy-classes/… Commented Apr 14, 2023 at 4:03
  • 1
    90% applies for one or both?
    – FelixIP
    Commented Apr 14, 2023 at 4:04
  • if two polygons are mostly overlapped with each other, then their intersected area is about 90% for both Commented Apr 14, 2023 at 4:51
  • If small polygon sits inside much bigger, fraction for 1st is 100% and can be way smaller for 2nd.
    – FelixIP
    Commented Apr 14, 2023 at 5:27
  • Then why I need to set 90% for both to make sure that they are overlapped and their shapes/ geographic ranges are similar. Commented Apr 14, 2023 at 6:10

1 Answer 1

0

I think your definition is flawed. According to it these 2 polygons:

enter image description here

are not highly overlapped, because for large one overlap percentage is too small.

I suggest ratio of intersect area to area of smallest in a pair. To implement this you might run polygon neighbours tool and populate new field using this expression:

aDict = {fid:shp for fid,shp in arcpy.da.SearchCursor("NODES",("OID@","Shape@"))}
def isLink(f,t):
 A,B = aDict[f],aDict[t]
 I = A.intersect(B,4).area
 if I/min(A.area,B.area)>0.50:return 1 
 return 0
#----
isLink( !src_OID!, !nbr_OID!)

enter image description here

It is so called edges table for graphs (LINK=1), with polygons being nodes of the same graph. Using Python networkx module you can now compute connected components of above graph (and dissolve connected nodes into groups).

Original polygons:

enter image description here

Dissolved into groups:

enter image description here

Your Answer

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

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