Próbuję wymyślić, jak użyć Pythona do wyodrębnienia wielokątów w jednym wektorze, które nakładają się o> 90% przez inny wektor. Chciałbym wtedy mieć wektor / mapę, która pokaże tylko te wielokąty. Przykładowe zdjęcie pokazuje moje warstwy. Chcę wszystkie szare wielokąty, które są> 90% czerwone.
Muszę to wszystko zrobić za pomocą Pythona (lub podobnie zautomatyzowanych metod). Mam ~ 1000 map do przetworzenia w ten sam sposób.
Odpowiedzi:
Następny kod działa w mojej konsoli Python QGIS. Tworzy warstwę pamięci z wielokątami, które w ponad 90% pokrywają się z czerwonymi obszarami.
Wypróbowałem kod z tymi dwiema warstwami wektorowymi:
Po uruchomieniu kodu w konsoli Python w QGIS, w celu potwierdzenia wyników, wydrukowano indeksy i, j zaangażowanych cech, obszary przecięcia, atrybut pola w polygons_intersects (1 dla obszarów czerwonych i 2 dla obszarów szarych) oraz kryterium nakładania się .
Utworzoną warstwę pamięci (elementy zielone) można zaobserwować na następnym obrazie. Tak było zgodnie z oczekiwaniami.
źródło
Tutaj rozwiązanie, które nie wymaga Pythona.
Dodaj nową warstwę wirtualną za pomocą zapytania takiego jak:
Z :
Basins800 jako warstwę, którą chcesz filtrować za pomocą szarych wielokątów
Istotność: nakładanie się czerwonej warstwy.
Rezultatem będzie nowa warstwa z tylko wszystkimi szarymi ploligonami> 90% nakładającymi się na czerwone wielokąty, z nowym polem zawierającym procent nakładania się.
Mam nadzieję, że to zadziała. W razie potrzeby mogę dodać więcej szczegółów do zapytania.
Uwaga: Twoje dane zawierają bardzo małe wielokąty (pochodzące z przetwarzania rastrowego i odpowiadające pikselowi rastrowemu (na zdjęciu widzimy 4 wielokąty, ale jest 25 innych małych wielokątów). To sprawia, że zapytanie jest bardzo powolne do wykonania (funkcja Przecięcie generuje jeden element dla każdej pary elementów z dwóch warstw).
źródło
Po obejrzeniu linku do plików kształtu Severity i Basins800 mogłem zrozumieć niezbędny geoproces. Zmodyfikowałem kod w:
Czy programowo znajdujesz wielokąty, które w ponad 90% pokrywają się z inną warstwą wielokątów wektorowych za pomocą QGIS?
za uzyskanie tego:
Po uruchomieniu kodu z tymi plikami kształtów w Konsoli Pythona QGIS, w ciągu kilku minut uzyskałem podobny wynik jak Pierma ; gdzie warstwa pamięci miała 31 cech (różnych z 29 uzyskanych przez niego wielokątów).
Nie zamierzam debugować wyników, ponieważ istnieją interakcje 1901 * 3528 = 6706728 dla funkcji. Jednak kod wygląda obiecująco.
źródło