Shapely - convert polygons to lines?
bugmenot123 is ok but I find easier use the boundary of the polygons. If you have a multipolygon or a polygon with holes the boundary returns a multilinestrig, if you have a polygon without holes the boundary returns a linestring.
Here is a simple example so you can see how it works:
import shapely
from shapely.geometry import MultiPolygon, Point
pol1 = MultiPolygon([Point(0, 0).buffer(2.0), Point(1, 1).buffer(2.0)])
pol2 = Point(7, 8).buffer(1.0)
pols = [pol1, pol2]
lines = []
for pol in pols:
boundary = pol.boundary
if boundary.type == 'MultiLineString':
for line in boundary:
lines.append(line)
else:
lines.append(boundary)
for line in lines:
print line.wkt
According to https://shapely.readthedocs.io/en/stable/manual.html#polygons:
- You can get the outer ring of a Polygon via its exterior property.
- You can get a list of the inner rings via its interior property.
According to https://shapely.readthedocs.io/en/stable/manual.html#collections-of-polygons:
- For a MultiPolygon you can iterate over its Polygon members via iterating via in or list() or explicitely using its geoms property.
Collect all the rings and you have the lines.