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 1

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

crop(rzeki, admin[admin$name_alt == "Wielkopolskie"])

Przykład 2

Szacowanie potencjalnej powierzchni działek objętych zalaniem.

#>    ID       Klasa Pow_m2
#> 1 101 Przemysłowa   5000
#> 2 102  Mieszkalna   2000

#>    Ryzyko
#> 1 Wysokie

Przykład 2

Szacowanie potencjalnej powierzchni działek objętych zalaniem.

result = intersect(parcels, flood) # część wspólna
result$Pow_Zal_m2 = expanse(result)
result$Proc = result$Pow_Zal_m2 / result$Pow_m2 * 100

print(result)
#>    ID       Klasa Pow_m2  Ryzyko Pow_Zal_m2  Proc
#> 1 101 Przemysłowa   5000 Wysokie       2500   50%
#> 2 102  Mieszkalna   2000 Wysokie       2000  100%

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.

Implementacje

Problem analityczny

Znalezienie gruntów pod zabudowę mieszkalną

Miasto poszukuje wolnych działek powyżej 5 ha przeznaczonych pod zabudowę mieszkalną. Działki nie mogą znajdować się na terenach zalewowych.


Jakie dane wejściowe są niezbędne?

Jak wykonać tę analizę?

Problem analityczny

Dane wejściowe:

  • Warstwa z działkami.
  • Plan zagospodarowania przestrzennego.
  • Strefy zagrożenia powodziowego.

Kroki do wykonania:

  1. Wyznaczenie niezabudowanych działek na podstawie atrybutu.
  2. Obliczenie powierzchni działek i ich selekcja.
  3. Docięcie działek zgodnie z założoną strefą mieszkalną.
  4. Usunięcie obszarów wewnątrz terenów zalewowych.

Pamiętaj, że warstwy muszą mieć ten sam układ współrzędnych!

Poligony szczątkowe

Poligony szczątkowe

Pojęcie poligonu szczątkowego (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).