In am a Django developer with limited GIS knowledge. In Django I have a polygon and a linestring as follows:
I would like to split the polygon by the linestring to obtain the 4 resulting polygons (or one new multipolygon):
Based on the API docs I thought I might be able to use the union method to get this, but this fails on geometry checking.
Does anyone perhaps have a suggestion on how best to achieve this?
Answer
You can use shapely to access the underlying GEOS API and create the polygons:
from shapely import wkt
from shapely.ops import linemerge, unary_union, polygonize
POLY = "POLYGON ((34.67491149902344 31.59900710035676, 34.85000610351562 31.59900710035676, 34.85000610351562 31.73867905688433, 34.67491149902344 31.73867905688433, 34.67491149902344 31.59900710035676))"
LINE = "LINESTRING (34.64401245117188 31.63292168314889, 34.80812072753906 31.75911546882192)"
poly = wkt.loads(POLY)
line = wkt.loads(LINE)
merged = linemerge([poly.boundary, line])
borders = unary_union(merged)
polygons = polygonize(borders)
for p in polygons:
print(p)
Since GEOS is used by GeoDjango and shapely, data is interchangeable between them.
Solution adapted from answer here: https://stackoverflow.com/questions/4129241/split-a-polygon-with-a-linestring-in-jts
No comments:
Post a Comment