Ich habe eine Pufferebene (grünes Polygon), die ich auf zwei Polygone aufteilen möchte, wenn sie eine Barriere überschreitet (blaue Linie). Ich habe versucht, "splitGeometry" -Methode zu verwenden, aber ich kann es einfach nicht zum Laufen bringen. Mein bisheriger Code lautet:
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)
Dies gibt 1 für das Ergebnis (Fehler) und eine leere Liste für newGeometries zurück. Jede Hilfe wird sehr geschätzt.
Antworten:
Hierfür können Sie die
reshapeGeometry
Funktion desQgsGeometry
Objekts verwenden, das ein Polygon entlang seines Schnittpunkts mit einer Linie schneidet.Das Folgende schneidet die Pufferpolygone mit den Linien und fügt die geteilten Polygon-Features einer Speicherebene hinzu (QGIS 2.0-Syntax):
quelle
Eine gute Annäherung mit GDAL> = 1.10.0, die mit SQLite und SpatiaLite kompiliert wurde, besteht darin, Ihre Layer (z. B. poligon.shp und line.shp ) in eine OGR-VRT-Datei (z. B. layers.vrt ) zu packen :
um einen sehr kleinen Puffer (zB 1 Mikron) um line.shp zu haben , der die * buffer_line * Schicht erhält. Dann können wir mit SpatiaLite symmetrische Differenzen und Differenzen auf diese Geometrien anwenden:
Offensichtlich ist all dieses Zeug perfekt von einem Python-Skript ausführbar:
Hoffe das hilft!
quelle
Die Antwort von Jake hat topologische Probleme mit den aufgeteilten Polygonen. Ich habe eine Lösung gefunden, hoffe dies kann helfen: https://gist.github.com/RamonLopezEscudero/844c1401f5339143da1b2b5cf7ff27bd
quelle