J'ai une couche tampon (polygone vert) que je souhaite diviser en deux polygones chaque fois qu'elle franchit une barrière (ligne bleue). J'ai essayé d'utiliser la méthode "splitGeometry", mais je n'arrive pas à la faire fonctionner. Jusqu'à présent, mon code est le suivant:
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)
Ce qui renvoie 1 pour le résultat (erreur) et une liste vide pour newGeometries. Toute aide est grandement appréciée.
Réponses:
Vous pouvez utiliser la
reshapeGeometry
fonction de l'QgsGeometry
objet pour cela, qui coupe un polygone le long de son intersection avec une ligne.Les éléments suivants coupent les polygones tampons avec les lignes et ajoutent les entités de polygone fractionné à une couche mémoire (syntaxe QGIS 2.0):
la source
Une bonne approximation avec GDAL> = 1.10.0 compilé avec SQLite et SpatiaLite consiste à envelopper vos couches (par exemple poligon.shp et line.shp ) dans un fichier OGR VRT (par exemple couches.vrt ):
afin d'avoir un très petit tampon (par exemple 1 micron) autour de line.shp obtenant la couche * buffer_line *. Ensuite, nous pouvons appliquer la différence symétrique et la différence sur ces géométries en utilisant SpatiaLite:
Évidemment, tout cela est parfaitement exécutable à partir d'un script Python:
J'espère que cela t'aides!
la source
La réponse de Jake a des problèmes topologiques avec les polygones fractionnés. J'ai fait une solution, j'espère que cela peut aider: https://gist.github.com/RamonLopezEscudero/844c1401f5339143da1b2b5cf7ff27bd
la source