Search code examples
pythongeometrypolygonintersectionshapely

remove polygons with an intersection higher than a threshold


The goal is to remove polygons with an intersection higher than a threshold, let's say 80% of the area from the smaller intersected polygon.

In the following picture we see in first image how the small red circle in coordinate (2.06, 41.41) is overlapping with two big circles, in this case in a percentage higher than 80% of its area. So the output will be the second image where the polygons remains under an smaller area of intersection than 80%.

enter image description here

For a reproducible example the data from the image is:

df = pd.DataFrame({"centroid":[geometry.Point(2.1990512195822394, 41.390164933230444), 
                               geometry.Point(2.1253931941117, 41.39962167422747), 
                               geometry.Point(2.0894753122714187, 41.41858536477601), 
                               geometry.Point(2.0724937348578973, 41.41460885909822), 
                               geometry.Point(2.0617756309327735, 41.42279161424217)],
                   "radius":[591.0368301703261,
                             247.41971532239666,
                             1978.0374093864489,
                             270.9246060416432,
                             1218.9034814954907],
                  }
                 )

Solution

  • For computing the intersection area, just do the following:

    import matplotlib.pyplot as plt
    from shapely.geometry.point import Point
    
    test_circle = Point(1.7, 3).buffer(0.5)
    other = Point(3, 4).buffer(2)
    
    intersection = other.intersection(test_circle)
    
    plt.axis("equal")
    plt.plot(*test_circle.exterior.xy, c="r")
    plt.plot(*other.exterior.xy, c="g")
    
    if intersection.area > 0.8 * test_circle.area:
        # do stuff
        ...
    

    then you just have to test the possible combinations of overlapping circles.