Mam warstwę buforową (zielony wielokąt), którą chcę podzielić na dwa wielokąty, gdy tylko przekroczy barierę (niebieska linia). Próbowałem użyć metody „splitGeometry”, ale po prostu nie mogę jej uruchomić. Mój kod do tej pory jest następujący:
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)
Który zwraca 1 dla wyniku (błąd) i pustą listę dla nowychGeometries. Każda pomoc jest mile widziana.
Odpowiedzi:
Możesz użyć do tego
reshapeGeometry
funkcjiQgsGeometry
obiektu, który przecina wielokąt wzdłuż jego przecięcia z linią.Poniższe elementy przecinają wielokąty buforowe z liniami i dodają funkcje podzielonego wielokąta do warstwy pamięci (składnia QGIS 2.0):
źródło
Dobre przybliżenie za pomocą GDAL> = 1.10.0 skompilowanego z SQLite i SpatiaLite polega na zawijaniu twoich warstw (np. Poligon.shp i line.shp ) w plik OGR VRT (np. Layer.vrt ):
aby mieć bardzo mały bufor (np. 1 mikron) wokół linii. shp otrzymując warstwę * buffer_line *. Następnie możemy zastosować różnicę symetryczną i różnicę do tych geometrii za pomocą SpatiaLite:
Oczywiście wszystkie te rzeczy są doskonale wykonywalne ze skryptu Python:
Mam nadzieję że to pomoże!
źródło
Odpowiedź Jake'a ma problemy topologiczne z podzielonymi wielokątami. Zrobiłem rozwiązanie, mam nadzieję, że to może pomóc: https://gist.github.com/RamonLopezEscudero/844c1401f5339143da1b2b5cf7ff27bd
źródło