Extract points/coordinates from a polygon in Shapely
So, I discovered the trick is to use a combination of the Polygon
class methods to achieve this.
from shapely.geometry import Polygon
# Create polygon from lists of points
x = [list of x vals]
y = [list of y vals]
some_poly = Polygon(x,y)
# Extract the point values that define the perimeter of the polygon
x, y = some_poly.exterior.coords.xy
It took me a while to learn that a Polygon has an exterior boundary and possibly several interior boundaries. I am posting here because some of the answers don't reflect that distinction, though to be fair the original post did not use as an example a polygon with interior boundaries.
The points forming the exterior boundary are arranged in a CoordinateSequence, which can be obtained as
polygon.exterior.coords
You can find the length of this object using len(polygon.exterior.coords)
and can index the object like a list. To get the first vertex, for example, use polygon.exterior.coords[0]
. Note that the first and last points are the same; if you want a list consisting of the vertices without that repeated point, use polygon.exterior.coords[:-1]
.
You can convert the CoordinateSequence (including the repeated vertex) to a list of points thus:
list(polygon.exterior.coords)
Similarly, the CoordinateSequence consisting of the vertices forming the first interior boundary is obtained as polygon.interiors[0].coords
, and the list of those vertices (without the repeated point) is obtained as polygon.interiors[0].coords[:-1]
.