krajobraz-GIS-analiza przestrzenna

Tomasz Giętkowski i współautorzy bloga: Sebastian Czapiewski, Jakub Makarewicz, Szymon Bryzgalski

#17 Analiza poligon w poligonie

QGIS nie posiada narzędzia do bezpośredniego wykonania analizy poligon w poligonie (czyli obliczania powierzchni poligonów lub ich części, zawartych w innych poligonach). W związku z tym, niezbędne jest przeprowadzenie algorytmu przekształceń, który często stwarza początkującym sporo problemów. Zadanie rozpoczynamy od pobrania archiwum z warstwami siatka.shp oraz jeziora.shp. Problem polegać będzie na obliczeniu powierzchni jezior w obrębie oczek siatki.

1. Pierwszy krok to sprawdzenie, czy nasze dane mają określone to samo odniesienie przestrzenne, w naszym przypadku EPSG:2180

2. Należy rozciąć jeziora granicami oczek siatki: Vector>Geoprocessing tools>Intersect
W oknie jako Input wskazać warstwę, która ulegnie rozcięciu, czyli jeziora, dalej warstwę rozcinającą – siatkę. Nazwa warstwy wyjściowej jest obojętna, pod warunkiem, że spełnia opisane wcześniej kryteria, np. jeziora_intersect

3. Siatka może rozciąć jezioro w taki sposób, że w obrębie jednego oczka siatki powstaną dwie części jeziora, stanowiące nadal jeden obiekt (mające w tabeli atrybutów jeden wiersz). Obiekty wieloczęściowe należy uprościć do postaci jednoczęściowych: Vector>Geometry Tools>Multipart to single parts
Tak przygotowaną warstwę można nazwać jeziora_intersect_single

4. Teraz powstałym fragmentom jeziora można policzyć powierzchnie . Pamiętać trzeba, aby nazwa atrybutu powierzchni nie była dłuższa niż 6 znaków np. pow_jez (wyjaśnię to w dalszej części).

5. Następnie powierzchnie rozciętych fragmentów jezior trzeba przenieść do oczek siatki.

Niby sprawa prosta, ale to właśnie tu zaczynają się problemy. Narzędzie do przenoszenia atrybutów za pomocą relacji przestrzennych (Vector>Data Management Tools>Join Attributes by location), w przypadku poligonów zachowuje się nieco zaskakująco. Otóż fragmentami jezior, będącymi w relacji „intersect” w stosunku do siatki są te, które leżą w obrębie oczka siatki, oraz te które mają z danym oczkiem wspólną granicę, czyli leżące w oczku sąsiednim. Naturalnie, powierzchnie tych drugich z nich nie powinny wliczać się w obręb danego oczka. Problem można rozwiązać w następujący sposób.

6. Należy wygenerować w obrębie każdego rozciętego fragmentu jeziora punkt: Vector>Research tools>Random points, wskazując Input Boundary Layer – jeziora_intersect, oraz liczbę punktów w każdym INDYWIDUALNYM poligonie na 1.

7. W kolejnym kroku przenosimy atrybuty fragmentów jezior (wraz z ich powierzchnią) do znajdującego się w ich obrębie punktu: Vector>Data Management Tools>Join Attributes by Location (Target – warstwa punktowa itd.).

8. Ostatnim zadaniem jest przeniesienie atrybutów z tak przygotowanych punktów, do oczek siatki (narzędzie jak powyżej), wskazując warstwę siatki jako Traget, zaznaczając Sum w opcji Take summary of interesting features oraz Keep all records, ponieważ może się zdarzyć, że chcemy zachować także te oczka, w obrębie których nie ma jezior (a dosłownie punktów z powierzchniami fragmentów powstałych z ich rozcięcia).

Po wykonaniu tej operacji warto podejrzeć tabelę atrybutów. Czy wiecie dlaczego nazwa atrybutu powierzchni musiała być taka krótka?

Zadanie do prostych nie należy. Ale jego wykonanie ze zrozumieniem powoduje, że można być pewnym dobrego przygotowania do dalszych, bardziej zaawansowanych analiz.

, ,

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>