Es muy fácil de hacer con Shapely. El secreto es el predicado de unión que divide las líneas en segmentos en cada intersección.
El Polígono se convierte en un LinearRing o LineString y se hace la unión.
from shapely.geometry import LineString, Polygon
# unión de la línea y el LinearRing del Polígono
result = line.union(LineString(list(polygon.exterior.coords)))
El resultado es un MultiLineString
Ahora podemos usar la función polygonize
from shapely.ops import polygonize
for geom in polygonize(result):
.....
Resultado
En PyQGIS, el predicado combine es el equivalente de unión, ver Python: Unir polígonos seleccionados en una capa)
ring = poly.asPolygon()[0]
linearRing = ring.asPolyline()
result = line.combine(linearRing)
El resultado es el mismo MultiLineString pero PyQGIS no tiene una función polygonize. Existe un algoritmo en la Caja de Herramientas de Procesamiento (qgis:polygonize) pero falla con MultiLineStrings en mi caso. Así que sigo usando shapely.
0 votos
Supongo que la forma más "simple" sería traducir el script de tu segundo enlace a PyQGIS. Sin embargo, esto requiere un buen conocimiento de PyQGIS.