У меня есть буферный слой (зеленый многоугольник), который я хочу разделить на два многоугольника всякий раз, когда он пересекает барьер (синяя линия). Я пытался использовать метод "splitGeometry", но я просто не могу заставить его работать. Мой код пока таков:
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)
Который возвращает 1 для результата (ошибка) и пустой список для newGeometries. Любая помощь очень ценится.
Ответы:
Для этого вы можете использовать
reshapeGeometry
функциюQgsGeometry
объекта, которая разрезает многоугольник вдоль его пересечения с линией.Следующее будет пересекать буферные полигоны со строками и добавлять элементы разделенного полигона в слой памяти (синтаксис QGIS 2.0):
источник
Хорошее приближение с GDAL> = 1.10.0, скомпилированным с SQLite и SpatiaLite, состоит в том, чтобы обернуть ваши слои (например, poligon.shp и line.shp ) в файл OGR VRT (например, layer.vrt ):
чтобы иметь очень маленький буфер (например, 1 микрон) вокруг line.shp, получая слой * buffer_line *. Затем мы можем применить симметричную разность и разность к этим геометриям, используя SpatiaLite:
Очевидно, что все это прекрасно выполняется из скрипта Python:
Надеюсь это поможет!
источник
В ответе Джейка есть топологические проблемы с расщепленными полигонами. Я принял решение, надеюсь, это поможет: https://gist.github.com/RamonLopezEscudero/844c1401f5339143da1b2b5cf7ff27bd
источник