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:
1 2 3 |
library(leaflet) library(raster) library(sf) |
Do naszego ćwiczenia użyjemy warstwy wektorowe używane już wcześniej: koleje i drogi. Wczytajmy je:
1 2 |
railways <- st_read("d:/kolej.shp") roads <- st_read("d:/drogi.shp") |
Znajdźmy przejazdy:
1 |
railway_crossings <- st_intersection(railways,roads) |
Wczytajmy jeszcze raster. Użyjemy NMT dla Mazowsza:
1 |
dem <- raster("d:/mazowieckie_dem.tif") |
Wczytany raster nie ma nadanego układu współrzędnych. Poprawmy to:
projection(dem) = CRS(„+init=EPSG:2180”)
1 |
projection(dem) = CRS("+init=EPSG:2180") |
Przytniemy NMT do zasięgu warstwy dróg:
1 |
dem <- crop(nmt,roads) |
Otwórzmy podstawę mapy używając leaflet i dodając domyśle kafle podkładu mapy OSM:
1 |
m <- leaflet() %>% addTiles() |
Wyświetlmy mapę:
1 |
m |
Dodajmy do mapy warstwę rastrową NMT, z przezroczystością 0.8 funkcją addRasterImage:
1 2 |
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:
1 2 3 4 |
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:
1 2 3 4 5 |
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).
1 2 3 4 5 6 |
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.