Ich versuche herauszufinden, wie man mit Python die Polygone in einem Vektor extrahiert, die von einem anderen Vektor um> 90% überlappt werden. Ich hätte dann gerne einen Vektor / eine Karte, die nur diese Polygone zeigt. Das Beispielbild zeigt meine Ebenen. Ich möchte alle grauen Polygone, die> 90% rot sind.
Ich muss dies alles über Python (oder ähnlich automatisierte Methoden) tun. Ich habe ~ 1000 Karten, um auf die gleiche Weise zu verarbeiten.
Antworten:
Der nächste Code funktioniert in meiner Python-Konsole von QGIS. Es wird eine Speicherschicht mit Polygonen erzeugt, die zu> 90% von roten Bereichen überlappt sind.
Ich habe den Code mit diesen beiden Vektorebenen ausprobiert:
Nachdem der Code in der Python-Konsole von QGIS ausgeführt wurde, wurden zur Bestätigung der Ergebnisse die Indizes i, j der beteiligten Features, Schnittbereiche, Feldattribute in polygons_intersects (1 für rote Bereiche und 2 für graue Bereiche) und das Überlappungskriterium gedruckt .
Die erstellte Speicherschicht (grüne Merkmale) kann beim nächsten Bild beobachtet werden. Es war wie erwartet.
quelle
Hier eine Lösung, die kein Python benötigt.
Fügen Sie eine neue virtuelle Ebene mit einer Abfrage wie der folgenden hinzu:
Mit:
Basins800 als Ihre Ebene möchten Sie mit grauen Polygonen filtern
Schweregrad: Ihre rote Schicht überlappt sich.
Das Ergebnis ist eine neue Schicht, in der nur alle grauen Plolygone> 90% von roten Polygonen überlappt werden. Ein neues Feld enthält den Überlappungsprozentsatz.
Hoffe das funktioniert. Ich kann bei Bedarf weitere Details zur Abfrage hinzufügen.
Hinweis: Ihre Daten enthalten sehr kleine Polygone (die aus Ihrer Rasterverarbeitung stammen und einem Rasterpixel entsprechen (auf dem Bild sehen Sie 4 Polygone, aber es gibt 25 andere kleine Polygone). Dadurch wird die Ausführung der Abfrage sehr langsam (Schnittfunktion) generiert ein Feature für jedes Feature-Paar aus den beiden Ebenen).
quelle
Nachdem ich den Link zu den Shapefiles Severity und Basins800 gesehen hatte , konnte ich den erforderlichen Geoprozess verstehen. Ich habe den Code geändert in:
Mit QGIS programmgesteuert Polygone finden, die zu> 90% von einer anderen Vektorpolygonschicht überlappt werden?
für dieses bekommen:
Nachdem ich den Code mit diesen Shapefiles in der Python-Konsole von QGIS ausgeführt hatte, erhielt ich in wenigen Minuten ein ähnliches Ergebnis wie Pierma . wo die Speicherschicht 31 Merkmale hatte (verschiedene von 29 Polygonen, die er bekommen hatte).
Ich werde die Ergebnisse nicht debuggen, da es 1901 * 3528 = 6706728 Interaktionen für Features gibt. Der Code sieht jedoch vielversprechend aus.
quelle