GISProjekt R

Konwersja poligonów na punkty lub linie w R

Często potrzebujemy uprościć geometrię poligonów do punktów lub linii. Jak to zrobić w R? Nic prostszego – sięgamy do funkcji gCentroid lub gPointOnSurface z biblioteki rgeos.

Wczytajmy najpierw biblioteki do czytania i przekształcania danych wektorowych:

library(rgdal)
library(rgeos)

Następnie wczytujemy nasze poligony. My skorzystamy z granic gmin na Mazowszu z PRG:

polygons <- readOGR("d:/gminy_maz.shp")

Wyświetlamy wczytaną warstwę:

plot(polygons)

Korzystając z gCentroid możemy wygenerować centroidy poligonów:

centroids <- gCentroid(polygons, byid = T)

Dodajmy centroidy do wyświetlonej wcześniej warstwy:

plot(centroids,add=T, pch = 20, col = "red")

W bibliotece rgdal mamy jeszcze jedną funkcję do generalizacji poligonów do punktów – gPointOnSurface. Funkcja ta działa trochę wolniej, ale punkty generuje zawsze wewnątrz poligonów w przeciwieństwie do gCentroid. Stwórzmy warstwę z wykorzystaniem tego narzędzia:

pos <- gPointOnSurface(polygons, byid = T)

Dodajmy wynik do wcześniej wyświetlanych warstw:

plot(pos,add = T, pch = 20, col = "green")

Jak widać punkty z obu warstw punktowych są przesunięte między sobą.

Na koniec pokażemy jak zmienić poligony na linie. Wykorzystujemy do tego rzutowanie klas z użyciem funkcji bazowe R as:

lines <- as(polygons, "SpatialLinesDataFrame")

Sprawdzamy klasę nowego obiektu:

> class(lines)

[1] "SpatialLinesDataFrame"

attr(,"package")

[1] "sp"

Mamy warstwę linii:)