Polygon puffern, bis es mit PyQGIS auf den Nachbarn trifft?

8

Ich habe ein Shapefile, das aus mehreren Polygonen besteht. Benachbarte Polygone teilen häufig ein Attribut.

Ich muss diese Polygone basierend auf dem gemeinsamen Attribut puffern. Ich möchte diese Puffer jedoch erweitern, bis sie sich treffen und an diesem Punkt aufhören können.

Ich habe ein hastig zusammengestelltes Modell:

PoorDrawExample

Alles, was ich Code habe, ist das Folgende:

from qgis.core import *
from qgis.analysis import *

layer=qgis.utils.iface.activeLayer() 

QgsGeometryAnalyzer().dissolve(layer, "D:/test_dissolved.shp", onlySelectedFeatures=False, uniqueIdField=3, p=None)

Ehrlich gesagt bin ich mit der QGIS-API-Dokumentation nicht sehr vertraut und kann trotz meiner Bemühungen keine geeignete Methode dafür finden. QgsGeometryAnalyzer().dissolveerlaubt mir, den Puffer aufzulösen, aber das ist nicht das, wonach ich suche.

Sollte ich hier vielleicht in eine andere Richtung schauen?

Ingwe
quelle

Antworten:

5

Etwas, das Sie versuchen könnten, ist ein Thiessen-Prozess, bei dem Sie die Polygone voronoi und dann durch ähnliche Attribute auflösen. Ich weiß nicht, was das in Python sein würde, aber vielleicht sind die Schritte für Sie nützlich.

Ritterhund
quelle
Ich werde versuchen, die Voronoi-Route mit pyQGIS herauszufinden und zu sehen, wohin sie mich führt. Ich bevorzuge die Idee einer Open Source-Lösung.
Ingwe
Was meinst du mit Open Source? QGIS und alle seine Tools unterliegen der kostenlosen Open Source-Lizenz.
Knightshound
2

Sie möchten wahrscheinlich die Funktionen der Rasteranalyse untersuchen. Siehe Erstellen einer Mittellinie für jedes Polygon in der U-Boot-Canyon-Datenbank mit ArcGIS for Desktop Basic? und Erstellen von Thiessen (Voronoi) -Polygonen unter Verwendung von Linien (anstelle von Punkten) als Eingabefunktionen? für weitere Inspiration.

Dazu müssen Sie natürlich eine geeignete Rasterauflösung verwenden.

bugmenot123
quelle
Ich mag diese Idee, in ein Raster zu konvertieren, und sie war mir eingefallen, aber würde ein großer Datensatz nicht zu einer sehr langsamen Verarbeitungszeit führen?
Ingwe
Vielleicht nicht langsamer als dasselbe iterativ mit Vektoren.
Bugmenot123
1

Ich hatte neulich eine etwas verwandte Aufgabe. In der Theorie sollten Voronoi-Polygone mit (gewichteten) Gebäudepunktpunkten nur die Lösung für Ihren Fall sein, aber es hat bei mir nicht funktioniert. PostgreSQL ist nicht das, wonach Sie gefragt haben, aber als Problemumgehung könnte es einen Versuch wert sein , PostGIS ST_ApproximateMedialAxis zu verwenden , wenn es die "Mittellinie" zwischen jedem Gebäude ist, nach dem Sie für den ersten Schritt suchen. Sie müssten ein Basispolygon für den gesamten Untersuchungsbereich erstellen und die Gebäudepolygone ausschneiden, bevor Sie die Funktion auf das Basispolygon anwenden, um verwandte Ergebnisse zu erhalten. Könnte funktionieren, könnte nicht ...

Geozelot
quelle