Introduction
In this article, we will discuss how to extract the intersection between two polygons using Shapely - a Python package for geometric manipulation and analysis.
Before diving into the extraction process, let's first understand what polygons are. In simple terms, a polygon is a closed shape with three or more straight sides. It is a two-dimensional figure that is made up of line segments connected end to end.
Examples of polygons include squares, rectangles, triangles, and pentagons.
Create two polygons using Shapely
Shapely is a Python package that provides geometric objects, predicates, and operations for the manipulation and analysis of planar geometric objects.
To find the intersection between two polygons using Shapely, we must start by creating two polygon objects. This is achieved by specifying a list of coordinates that define the vertices of each polygon. Let's begin by creating the first polygon using Shapely:
from shapely.geometry import Polygonimport numpy as npa = 2.0 # square sizepos = np.array((1.0, 2.0))c1 = np.array((0.0, 0.0)) + posc2 = np.array((0.0, a)) + posc3 = np.array((a, a)) + posc4 = np.array((a, 0.0)) + poscoords = (c1,c2,c3,c4)rect1 = Polygon( coords )
and then a second one:
a = 2.0 # square sizepos = np.array((2.0, 3.0))c1 = np.array((0.0, 0.0)) + posc2 = np.array((0.0, a)) + posc3 = np.array((a, a)) + posc4 = np.array((a, 0.0)) + poscoords = (c1,c2,c3,c4)rect2 = Polygon( coords )
Once we have our polygon objects, we can then use the "intersection" method to find the common area between them:
rect3 = rect1.intersection(rect2)
The "rect3" variable will now contain a new polygon object representing the common area between "rect1" and "rect2".
To obtain the coordinates of the new polygon rect3, one possible solution is to utilize the exterior.coords.xy function:
rect3.exterior.coords.xy
gives
(array('d', [2.0, 3.0, 3.0, 2.0, 2.0]), array('d', [4.0, 4.0, 3.0, 3.0, 4.0]))
Visualization
Plotting the two polygons
In a previous article, we learned about plotting polygons in Python using Shapely and Matplotlib. Now, let's utilize these libraries to plot the two polygons we have defined earlier.
from matplotlib.pyplot import figureimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.patches as mpatchesfig = figure(num=None, figsize=(12, 10), dpi=100, edgecolor='k')ax = plt.axes()#----------------------------------------## Plot rectangle 1X,Y = rect1.exterior.coords.xypoly = mpatches.Polygon(np.stack( (X, Y), axis=1 ),closed=True,ec='k',lw=1,color='coral',alpha=0.5)ax.add_patch(poly)#----------------------------------------## Plot rectangle 2X,Y = rect2.exterior.coords.xypoly = mpatches.Polygon(np.stack( (X, Y), axis=1 ),closed=True,ec='k',lw=1,color='lightblue',alpha=0.5)ax.add_patch(poly)#----------------------------------------#plt.xlim(0,6)plt.ylim(0,6)plt.title('How to extract the intersection between two polygons in Python using Shapely ?')plt.savefig("polygons_intersection_01.png", bbox_inches='tight', facecolor='white')plt.show()

Plotting the intersection
from matplotlib.pyplot import figureimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.patches as mpatchesfig = figure(num=None, figsize=(12, 10), dpi=100, edgecolor='k')ax = plt.axes()#----------------------------------------## Plot intersectionX,Y = rect3.exterior.coords.xypoly = mpatches.Polygon(np.stack( (X, Y), axis=1 ),closed=True,ec='k',lw=1,color='black',alpha=0.5)ax.add_patch(poly)#----------------------------------------#plt.xlim(0,6)plt.ylim(0,6)plt.title('How to extract the intersection between two polygons in Python using Shapely ?')plt.savefig("polygons_intersection_02.png", bbox_inches='tight', facecolor='white')plt.show()

Plotting all together
from matplotlib.pyplot import figureimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.patches as mpatchesfig = figure(num=None, figsize=(12, 10), dpi=100, edgecolor='k')ax = plt.axes()#----------------------------------------## Plot rectangle 1X,Y = rect1.exterior.coords.xypoly = mpatches.Polygon(np.stack( (X, Y), axis=1 ),closed=True,ec='k',lw=1,color='coral',alpha=0.5)ax.add_patch(poly)#----------------------------------------## Plot rectangle 2X,Y = rect2.exterior.coords.xypoly = mpatches.Polygon(np.stack( (X, Y), axis=1 ),closed=True,ec='k',lw=1,color='lightblue',alpha=0.5)ax.add_patch(poly)#----------------------------------------## Plot intersectionX,Y = rect3.exterior.coords.xypoly = mpatches.Polygon(np.stack( (X, Y), axis=1 ),closed=True,ec='k',lw=1,color='black',alpha=0.5)ax.add_patch(poly)#----------------------------------------#plt.xlim(0,6)plt.ylim(0,6)plt.title('How to extract the intersection between two polygons in Python using Shapely ?')plt.savefig("polygons_intersection_03.png", bbox_inches='tight', facecolor='white')plt.show()

References
| Links | Site |
|---|---|
| How to create and plot polygons in python using shapely and matplotlib ? | moonbooks.org |
| shapely.intersection | shapely.readthedocs.io |
| shapely.intersects | shapely.readthedocs.io |
