Algorytmy danych geoprzestrzennych

Operacje nakładania warstw wektorowych

Krzysztof Dyba

Nakładanie warstw wektorowych

Nakładanie warstw wektorowych (vector overlay) to podstawowy zbiór operacji wykorzystywany w systemach informacji geograficznej do łączenia wektorowych zbiorów danych w celu analizy i zrozumienia relacji przestrzennych.

Do analizy mogą zostać wykorzystane różne typy geometrii reprezentujące przykładowo drzewa, granice, drogi czy budynki.

Proces nakładania łączy geometrię i atrybuty warstw wejściowych, umożliwiając sprawdzenie, w jaki sposób cechy z różnych warstw wpływają na siebie w przestrzeni.

Zastosowania

  • Analizy środowiskowe, np. analiza związku pomiędzy siedliskami gatunków a klasami pokrycia terenu
  • Zarządzanie kryzysowe, np. analiza obszarów zagrożonych powodzią uwzględniając dane o gęstości zaludnienia
  • Planowanie przestrzenne, np. określanie odpowiednich lokalizacji pod zabudowę uwzględniając obszary chronione i aktualną infrastrukturę
  • Analiza rynku, np. powiązanie lokalizacji klientów z danymi demograficznymi w celu ukierunkowania sprzedaży do określonej grupy

Przykład

Wyodrębnienie tylko tych rzek, które przepływają przez wielkopolskę.

intersect(admin[admin$woj == "Wielkopolskie"], rzeki)

Algorytmy

  • Usuwanie (Erase, Difference)
  • Przecięcie (Intersect) / Koniunkcja
  • Złączenie (Union) / Alternatywa
  • Różnica symetryczna (Symmetrical difference) / Alternatywa rozłączna
  • Przykrycie (Update, Cover)
  • Docinanie (Clip)

Usuwanie

Wynik obejmuje tylko te obiekty z jednej warstwy, które nie nakładają się na drugą warstwę.

p1 = vect("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))")
p2 = vect("POLYGON ((5 5, 5 -5, 15 -5, 15 5, 5 5))")
erase(p1, p2)

Przykład: Wykluczenie budynków nieobjętych zasięgiem powodzi.

Przecięcie

Wynik obejmuje tylko te obiekty, które nakładają się na obu warstwach wejściowych.

p1 = vect("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))")
p2 = vect("POLYGON ((5 5, 5 -5, 15 -5, 15 5, 5 5))")
intersect(p1, p2)

Przykład: Przecięcie warstwy typów gleby z warstwą działek pokaże typ gleby w obrębie każdej działki.

Złączenie

Wynik obejmuje wszystkie obiekty z obu warstw wejściowych, w tym nakładające się obszary.

p1 = vect("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))")
p2 = vect("POLYGON ((5 5, 5 -5, 15 -5, 15 5, 5 5))")
union(p1, p2)

Przykład: Złączenie warstwy obszarów zagrożonych powodziami i warstwy obszarów zagrożonych osuwiskami, zwróci obszary zagrożone powodzią, osuwiskami oraz jednocześnie powodzią i osuwiskami.

Różnica symetryczna

Wynik obejmuje obszary, w których warstwy wejściowe nie zachodzą na siebie, tj. wyklucza obszary przecięcia.

p1 = vect("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))")
p2 = vect("POLYGON ((5 5, 5 -5, 15 -5, 15 5, 5 5))")
symdif(p1, p2)

Przykład: Wykrywanie zmian pokrycia terenu w czasie.

Przykrycie

Wynikiem jest nowa warstwa zawierająca zaktualizowane obiekty pierwszej warstwy wejściowej na podstawie drugiej.

p1 = vect("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))")
p2 = vect("POLYGON ((5 5, 5 -5, 15 -5, 15 5, 5 5))")
cover(p1, p2)

Przykład: Aktualizacja przebiegu granic działek ewidencyjnych.

Docinanie

Docinanie jest podobną operacją do przecięcia, z tą różnicą, że atrybuty pochodzące z drugiej warstwy nie są kopiowane.

p1 = vect("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))")
p2 = vect("POLYGON ((5 5, 5 -5, 15 -5, 15 5, 5 5))")
crop(p1, p2)

Przykład: Wyodrębnienie dróg, które znajdują się w granicach miasta.

Zwracane typy geometrii

Wyjściowy typ geometrii przy docinaniu może być identyczny lub niższy.

Srebrne poligony

Srebrne poligony

Pojęcie srebrnego poligonu (sliver polygon) odnosi się do małego, wąskiego i często niezamierzonego wielokąta, który powstaje w wyniku przetwarzania danych przestrzennych, np. podczas operacji przecięcia, łączenia lub przycinania warstw wektorowych.

Najczęściej powstają na skutek niedopasowanych granic lub ograniczonej precyzji zapisu danych, co powoduje niewielkie przerwy pomiędzy obiektami.

Przykład

p1 = vect("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))")
p2 = vect("POLYGON ((0.1 0.1, 10.1 0.1, 10.1 10.1, 0.1 10.1, 0.1 0.1))")
symdif(p1, p2)

Konsekwencje

  • Błędne obliczenia powierzchni i obwodów
  • Błędy topologiczne
  • Negatywne efekty wizualne

Rozwiązania

  1. Kontrola i czyszczenie danych wejściowych
  2. Generalizacja danych wejściowych (uproszczenie geometrii)
  3. Ustawienia wartości tolerancji podczas operacji
  4. Post-processing (usuwanie poligonów na podstawie wartości progowej)