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:)