Tengo una capa intermedia (polígono verde) que quiero dividir en dos polígonos cada vez que cruza una barrera (línea azul). He estado tratando de usar el método "splitGeometry", pero no puedo hacerlo funcionar. Mi código hasta ahora es este:
while ldbuffprovider.nextFeature(feat):
while barprovider.nextFeature(feat2):
if feat.geometry().intersects(feat2.geometry()):
intersection = feat.geometry().intersection(feat2.geometry())
result, newGeometries, topoTestPoints=feat.geometry().splitGeometry(intersection.asPolyline(),True)
Que devuelve 1 para el resultado (error) y una lista vacía para newGeometries. Cualquier ayuda es muy apreciada.
Respuestas:
Puede usar la
reshapeGeometry
función delQgsGeometry
objeto para esto, que corta un polígono a lo largo de su intersección con una línea.Lo siguiente intersectará los polígonos del búfer con las líneas y agregará las características del polígono dividido a una capa de memoria (sintaxis QGIS 2.0):
fuente
Una buena aproximación con GDAL> = 1.10.0 compilado con SQLite y SpatiaLite consiste en envolver sus capas (por ejemplo, poligon.shp y line.shp ) en un archivo OGR VRT (por ejemplo, layers.vrt ):
para tener un búfer muy pequeño (por ejemplo, 1 micrón) alrededor de line.shp obteniendo la capa * buffer_line *. Luego, podemos aplicar la diferencia simétrica y la diferencia en estas geometrías usando SpatiaLite:
Obviamente, todo esto es perfectamente ejecutable desde un script Python:
¡Espero que esto ayude!
fuente
La respuesta de Jake tiene problemas topológicos con los polígonos divididos. Hice una solución, espero que esto pueda ayudar: https://gist.github.com/RamonLopezEscudero/844c1401f5339143da1b2b5cf7ff27bd
fuente