Buforowanie wektora w R
Buforowanie jest jednym z podstawowych narzędzi GIS używanym w analizach przestrzennych. Ale jak to zrobić w R? Wczytajmy najpierw warstwę kilku szlaków kolejowych z Open Street Map (pobierz) do zmiennej kolej, którą wykorzystamy do prezentacji możliwości funkcji buforowania:
1 2 |
library(rgdal) kolej = readOGR("D:/","kolej",stringsAsFactors = FALSE) |
Wyświetlmy wczytaną warstw:
1 |
plot(kolej) |

Wyświetlmy podsumowanie dla wczytanej warstwy kolej:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
summary(kolej) Object of class SpatialLinesDataFrame Coordinates: min max x 638667.5 678777.7 y 490053.6 519583.1 Is projected: TRUE proj4string : [+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs] Data attributes: osm_id code fclass name Length:213 Min. :6101 Length:213 Length:213 Class :character 1st Qu.:6101 Class :character Class :character Mode :character Median :6101 Mode :character Mode :character Mean :6101 3rd Qu.:6101 Max. :6106 |
Wczytana warstwa zawiera 213 obiektów liniowych prezentujących odcinki linii kolejowych znajdujących się w jednym z powiatów.
Do podstawowych analiz przestrzennych na danych wektorowych służy biblioteka rgeos, którą musimy zainstalować i zainicjować:
1 2 |
install.packages(„rgeos”) library(rgeos) |
Do buforowania warstw wektorowych służy funkcja gBuffer z zainstalowanej wcześniej biblioteki. Wygenerujmy za jej pomocą bufor wokół linii kolejowych o wielkości 1 km:
1 |
bufor = gBuffer(kolej, width = 1000) |
Wyświetlmy wygenerowany bufor oraz linie kolejowe:
1 2 |
plot(bufor, col = „red”) plot(kolej, add = TRUE) |

Sprawdźmy ile elementów ma bufor:
1 2 3 |
length(bufor) [1] 1 |
Bufor ma jeden element, to znaczy że bufory dla poszczególnych odcinków linii kolejowej zostały ze sobą połączone. W przypadku, gdy chcemy z użyciem tej funkcji otrzymać bufory dla każdego elementu zbioru musimy dodać do funkcji argument byid równy TRUE:
1 |
bufor = gBuffer(kolej, width = 1000, byid = TRUE) |
Wyświetmy wynik działania funkcji:
1 2 |
plot(bufor, col = "red") plot(kolej, add = TRUE) |

Sprawdźmy ile teraz elementów ma bufor:
1 2 3 |
length(kolej) [1] 213 |
Dla każdego elementu został wygenerowany oddzielny bufor. W funkcji gBuffer możemy również zdefiniować różną wartość bufora dla każdego z elementów. Wygenerujmy wektor w zawierający szerokość bufora 500 m:
1 |
w = rep(500,length(kolej)) |
Zmieńmy jedną z wartości wektora na 2000 m:
1 |
w[86] = 2000 |
Teraz w funkcji gBuffer do atrybutu width wstawmy utworzony przez nas wektor w:
1 |
bufor = gBuffer(kolej, width = w, byid = TRUE) |
Wyświetlamy wynik:
1 2 |
plot(bufor, col = "red") plot(kolej, add = TRUE) |

Na mapie widać, że jedna z linii kolejowych ma dużo większy obszar bufora niż pozostałe. Tak to zdefiniowaliśmy w naszym wektorze w.
Podsumowując do buforowania w R służy funkcja gBuffer. Tworzone bufory możemy dowolnie modyfikować w zależności od naszych potrzeb poprzez zdefiniowanie odpowiednich atrybutów funkcji. W R można znaleźć wiele funkcji podobnych do przedstawionej znajdujących się w innych bibliotekach, ale tę kwestię pozostawiamy R-owym szperaczom:)