Jak automatycznie wypełniać dziury w wielokątach?

12

Czy w QGIS jest opcja automatycznego wypełniania otworów w wielokątach poprzez ustawienie parametrów, np. Maksymalnego obszaru, odległości między granicami? Chcę usunąć / wypełnić dziury, które są bardzo „cienkie” / małe.

J-Man
źródło
1
Czy jesteś zainteresowany dziurami (pierścieniami wewnątrz wielokątów) lub zmniejszaniem odstępów między oddzielnymi wielokątami?
Simbamangu,
Czy to musi być rozwiązanie oparte na QGIS? Wcześniej pisałem na blogu, jak to osiągnąć za pomocą przestrzennego SQL w PostGIS ( geospatial.commons.gc.cuny.edu/2013/11/04/… ). Jeśli nie korzystasz z PostGIS, prawdopodobnie mógłbym to dla ciebie dostosować do SpatiaLite, które, jak sądzę, jeśli używasz QGIS, możesz mieć już SpatiaLite w swoim łańcuchu narzędzi.
Lee Hachadoorian,

Odpowiedzi:

11

Używając QGIS 2.10.1-Pisa z Processing w wersji 2.10.2, istnieje kilka narzędzi dostępnych w Processing Toolbox :

  • Narzędzie Wypełniaj otwory , w którym możesz określić maksymalny obszar .
  • Narzędzie do usuwania otworów , które zostanie zastosowane do całej warstwy wejściowej.

Mam nadzieję że to pomoże!

Joseph
źródło
1
Wystarczy sprawdzić parametr maksymalnego obszaru, czyli maksymalny rozmiar otworu do wypełnienia? Czyli w projekcie licznika UTM, gdyby maksimum wynosiło 10 000, oznaczałoby to, że największą dziurą do wypełnienia byłby hektar, a jakakolwiek większa niż pozostałaby?
BillW
1
@BillW - Tak, wierzę, że to właśnie robi :)
Joseph
11

Z tym plikiem kształtu miałem do czynienia z tym samym problemem, co twój, mając wiele przerw między wielokątami.

Oryginalny plik z przerwami

Aby rozwiązać problem, możesz użyć niewielkiej modyfikacji metody tshiffle:

  1. Najpierw wykonaj różnicę między plikiem a wielokątem obejmującym cały jego zakres.

Extent_polygon

Różnica_tool

Ta akcja utworzy nowy plik kształtu składający się tylko z jednego wielokąta, więc musisz rozbić go na pojedyncze części. W tym celu można użyć narzędzia Vector / Geometry Tools / Multipart do narzędzia singleparts.

Wynik różnicy

Multi_to_single

Następnie usuń podmiot zewnętrzny. Teraz masz, w nowym pliku kształtu, kilka wielokątów pokrywających luki w swoim pierwotnym zasięgu.

gap_covered

  1. Wykonaj połączenie między danymi początkowymi a pojedynczymi częściami. Użyj narzędzia SAGA, ponieważ domyślna opcja QGIS tworzy duplikaty w bazie danych.

Unia

  1. Wszystkie luki pojawią się teraz jako puste rekordy w bazie danych (na przykład 72 wiersze). Posortuj tabelę za pomocą pola obszaru i pobierz wartość z najmniejszego wielokąta w oryginalnym pliku. W tym przypadku 0,13645 hektarów.

Baza danych

  1. Na koniec użyj narzędzia „Wyeliminuj wielokąty taśmy” z ustawieniami pokazanymi na obrazku.

wprowadź opis zdjęcia tutaj

  1. Ostateczny wynik nie ma żadnych luk.

wprowadź opis zdjęcia tutaj

gtapko
źródło
Czy możesz dodać więcej informacji dotyczących wyboru parametrów? Jaka jest „wartość”? Strona dokumentacji QGIS jest bardzo szczegółowa. Bardzo elegancka odpowiedź, szkoda, że ​​początkowy użytkownik nie przyjął żadnej z odpowiedzi!
user3386170
1
„Wartość” to wielkość, której używasz do porównania. W przykładzie użyto pola „powierzchnia” została ustawiona w hektarach, więc 0,1 oznacza: wyeliminuj wielokąty mniejsze lub równe 0,1 hektara.
gtapko
gtapko, czy możesz podać dalsze szczegóły dotyczące fazy 3? nie rozumiem tego, dzięki
newGIS
4

Mogą istnieć bardziej eleganckie rozwiązania, ale to zawsze działało dla mnie.

1) Utwórz wielokąty „wypełniające dziury”. Aby to zrobić, narysuj gigantyczny wielokąt większy od oryginału i użyj narzędzia „różnica”. Jeśli narysujesz o wiele większy wielokąt, będziesz mieć wszystkie wielokąty „wypełniające dziurę” oraz jeden większy wielokąt, który będzie otaczał pierwotny kształt. Usuń ten duży wielokąt, zachowując wielokąty „wypełniające dziurę”.

2) Połącz wielokąty „wypełniające dziury” z oryginalnym plikiem kształtu. Jeśli chcesz tylko wypełnić otwory, które spełniają określone kryteria (tj. Poniżej X liczby kilometrów kwadratowych), możesz to tutaj filtrować.

3) Rozpuść nowo scalony wielokąt na wspólnym polu.

tshiffle
źródło
Nie jest jasne, co do kroku 3, jak ktoś znajdzie wspólne pole?
iRfAn
Na tym etapie wspólne pole może być dowolne, celem jest po prostu rozpuszczenie granic między wielokątami. Możesz użyć istniejącego pola lub po prostu dodać jedno.
tshiffle
4

W python / shapely może to wypełnić twój wielokąt:

import shapely
from shapely.geometry import Polygon
filled_shape = Polygon(shape_with_holes.exterior)
mszel
źródło
2

Widziałem kilka wyjaśnień podążających tą samą ścieżką co gtapko i tshiffle, ale żadne nie działało dla mnie, ponieważ nieprawidłowe geometrie sprawiły, że narzędzie różnicowania przestało działać. Tak więc wymyśliłem własne rozwiązanie, które nie jest w 100% zautomatyzowane, ale można nim zarządzać. Prawdopodobnie ktoś już to wymyślił, ale zaryzykuję:

1) Utwórz identyfikator na oryginalnej, uszkodzonej warstwie

Utworzenie atrybutu identyfikatora jest proste, ale moje rozwiązanie jest takie, więc omówię to.

Najpierw musisz otworzyć tabelę atrybutów, a następnie przejść do Kalkulatora pola , który jest przyciskiem podobnym do liczydła. Tam pojawi się opcja utworzenia nowego pola lub zaktualizowania istniejącego. Na powyższym obrazku tworzę nowy o nazwie „ID”. Formuła znajduje się na końcu obrazu. (Przepraszam, że mój QGIS jest skonfigurowany w innym języku. Ponieważ projekt i formuły są dokładnie takie same we wszystkich wersjach językowych, nie sądzę, żeby to nam przeszkodziło.)

2) Konwertuj wielokąty na linie

Ten krok znajduje się w menu Wektor> Geometria . Twój przekształcony kształt powinien wyglądać następująco:

Zaraz po przekonwertowaniu wielokątów na linię będziesz musiał zrobić dokładnie odwrotnie, czyli ...

3) Konwertuj linie na wielokąty

Opcje znajdują się obok siebie. Ponownie, nie przejmujmy się tutaj barierą językową.

4) Ciesz się Powodem, dla którego zrobiłeś kroki 2 i 3 jest to, że teraz jesteś pewien, że te linie będą uważane za wielokąty, co oznacza, że mają teraz własną linię w tabeli atrybutów. Jeśli to sprawdzisz, będzie to wyglądać następująco:

Pierwszy to ZAWSZE cały wielokąt (zaufaj mi, usunąłem dziś kilkaset linii ...), a reszta to luźne linie na środku. Możesz włączyć edycję i przygotować się do działania. Jeśli zdecydujesz się tego spróbować, powinieneś pamiętać o dwóch rzeczach: uporządkuj tabelę pod kątem identyfikatora , w ten sposób masz pewność, że niczego nie przegapisz i użyj shift, aby wybrać klastry danych, tak jak każdy inny program .

Jestem świadomy tego nie jest crème de la crème QGIS rozwiązywania problemów, ale jeśli masz do czynienia z sytuacją, w której narzędzia nie pracują z powodu nieprawidłowej geometrii nich linia stworzenia (Próbowałem nawet rozpuszczanie przez identyfikator, ale to nie działało), może to być wyjście.

Eric Lino
źródło
Czy możesz zaktualizować swoje zdjęcia? Linki są zepsute!
Simbamangu,
Hej. Przykro mi, ale najwyraźniej Photobucket porwał moje zdjęcia, straciłem do nich dostęp. Już otworzyłem bilet i próbuję odzyskać dostęp. Wrócę do ciebie, gdy tylko będzie to możliwe.
Eric Lino,