Leaflet w R
Pokazaliśmy Wam jakiś czas temu jak prezentować wyniki swoich analiz na mapach z wykorzystaniem ggmap. Dzisiaj zaprezentujemy Wam jak używać pakietu leaflet w R do tworzenia interaktywnych map. Dodatkowo potrzebować będziemy bibliotek raster i sf do wczytania i przetworzenia warstw wejściowych:
library(leaflet) library(raster) library(sf)
Do naszego ćwiczenia użyjemy warstwy wektorowe używane już wcześniej: koleje i drogi. Wczytajmy je:
railways <- st_read("d:/kolej.shp") roads <- st_read("d:/drogi.shp")
Znajdźmy przejazdy:
railway_crossings <- st_intersection(railways,roads)
Wczytajmy jeszcze raster. Użyjemy NMT dla Mazowsza:
dem <- raster("d:/mazowieckie_dem.tif")
Wczytany raster nie ma nadanego układu współrzędnych. Poprawmy to:
projection(dem) = CRS(„+init=EPSG:2180”)
projection(dem) = CRS("+init=EPSG:2180")
Przytniemy NMT do zasięgu warstwy dróg:
dem <- crop(nmt,roads)
Otwórzmy podstawę mapy używając leaflet i dodając domyśle kafle podkładu mapy OSM:
m <- leaflet() %>% addTiles()
Wyświetlmy mapę:
m
Dodajmy do mapy warstwę rastrową NMT, z przezroczystością 0.8 funkcją addRasterImage:
m %>% addRasterImage(dem, opacity = 0.8, group = "DEM")
Dodajmy warstwę dróg (kolor niebieski) i linii kolejowych (kolor czerwony) korzystając z addPolylines. Dla warstw wektorowych konieczna jest transformacja do układu geograficznego z użyciem st_transform:
m %>% addRasterImage(dem, opacity = 0.8, group = "DEM") %>% addPolylines(data = st_transform(railways,4326), group = "Railways") %>% addPolylines(data = st_transform(roads,4326), color = "red", group = "Roads")
Wcześniej wykonaliśmy intersekcje dwóch wczytanych warstw, uzyskując warstwę punktową z przejazdami. Dodajmy ją do naszej mapy używając addCircleMakers:
m %>% addRasterImage(dem, opacity = 0.8, group = "DEM") %>% addPolylines(data = st_transform(railways,4326), group = "Railways") %>% addPolylines(data = st_transform(roads,4326), color = "red", group = "Roads") %>% addCircleMarkers(data = st_transform(railway_crossing,4326), color = "green", group = "Railway crossings")
Nasza mapa zawiera już wszystkie warstwy. Mapa jest interaktywna – możemy dowolnie się po niej poruszać.
Czy zwróciliście uwagę że dla każdej funkcji dodającej warstwę zdefiniowaliśmy atrybut group. Wartości tego atrybutu wykorzystamy w ostatnim kroku dodając do mapy listę warstw. Podzielimy warstwy na te wyświetlane niezależnie (baseGroups) i te które mogą się nakładać (overlayGroups).
m %>% addRasterImage(dem, opacity = 0.8, group = "DEM") %>% addPolylines(data = st_transform(railways,4326), group = "Railways") %>% addPolylines(data = st_transform(roads,4326), color = "red", group = "Roads") %>% addCircleMarkers(data = st_transform(railway_crossings,4326), color = "green", group = "Railway crossings") %>% addLayersControl(baseGroups = c("Railways","Roads"), overlayGroups = c("Railway crossings","DEM"))
Ostatecznie mapa wygląda i działa tak:
Post miał na celu tylko przybliżyć Wam możliwości pakietu leaflet. Posiada on wiele większe możliwości nie wspomniane dzisiaj, które musicie odkryć sami. Rozszerzyć wiedzę o użytych dzisiaj funkcjach bibliotek raster i sf możecie w naszym Kursie GIS w R.