Geospatial maps with leaflet

Building Dashboards with shinydashboard

Png Kee Seng

Researcher

The structure of a leaflet plot

  • The first layer required is leaflet()
    • Like ggplot()
  • addTiles() adds the world map
    • Like x, y in ggplot
  • New layers are added using %>%
    • Like + in ggplot
library(leaflet)

m <- leaflet() %>%
addTiles()

A blank leaflet canvas.

A leaflet canvas with the world map.

Building Dashboards with shinydashboard

Different map providers

  • Add addProviderTiles()
  • Some examples of providers are
    • MtbMap: Mountain biking
    • Esri.NatGeoWorldMap: By National Geo
    • Stamen.Toner: Black and white
m %>%
  addProviderTiles(providers$MtbMap)
m %>%
  addProviderTiles(providers$Esri.NatGeoWorldMap)
m %>% 
  addProviderTiles(providers$Stamen.Toner)

Leaflet with MtbMap provider.

Leaflet with nat geo provider.

Leaflet with stamen toner provider.

1 https://rstudio.github.io/leaflet/basemaps.html
Building Dashboards with shinydashboard

Adding polygons in leaflet

  • Add polygons using addPolygon()
    • The main argument required is a sf object

Adding a polygon in leaflet.

leaflet() %>% 
  addTiles() %>% 

addPolygons(data=london_poly,
col="red",
label=~Name)
Building Dashboards with shinydashboard

Adding polylines in leaflet

  • Need longitudes and latitudes
    • Contained in $geometry[[1]]
  • Polylines are plotted using addPolylines()
    • Longitudes and latitudes correspond to first and second columns
loop_geo <- london_loop$geometry[[1]]

capital_geo <- london_capital$geometry[[1]]
m2 <- leaflet() %>% 
  addTiles() %>% 
  addPolygons(data = london_poly, col="red", 
                  label=~Name) %>% 

addPolylines(loop_geo[,1], loop_geo[,2]) %>% addPolylines(capital_geo[,1], capital_geo[,2], color = "orange")
Building Dashboards with shinydashboard

Adding markers in leaflet

  • Can add markers
    • addCircleMarkers(): represents each point by a circle
    • addMarkers(): represents each point by a regular marker
m2 %>%
  addCircleMarkers(data = listings_geo,
                   label = ~name)
m2 %>%
  addMarkers(data = listings_geo,
                   label = ~name)

Circle markers in leaflet.

Regular markers in leaflet.

Building Dashboards with shinydashboard

markerClusterOptions

  • markerClusterOptions() can be added
    • Shows aggregated values

Markers with cluster options.

m2 %>%
  addMarkers(data = listings_geo,

clusterOptions = markerClusterOptions())
Building Dashboards with shinydashboard

User selection

  • Add a addLayersControl() layer to allow users inputs
  • baseGroups: Allow users to toggle between different map providers
    • Need to label each provider tile
    • Set baseGroups as a vector containing these labels
  • overlayGroups: Allows users to toggle layers on and off
    • Need to label each layer
    • Set overlayGroups as a vector containing these labels
m_london <- leaflet(london_poly) %>% 

addTiles(group="Default") %>% addProviderTiles(providers$Stamen.Toner,
group = "Toner") %>%
addProviderTiles(providers$Esri.NatGeoWorldMap,
group = "Nat Geo") %>%
addPolygons(col="red", label=~Name,
group = "Ward") %>%
addPolylines(loop_geo[,1], loop_geo[,2],
group = "London loop") %>%
addPolylines(capital_geo[,1], capital_geo[,2], labelOptions = labelOptions(noHide = TRUE), color = "orange",
group = "Capital ring", ) %>%
addMarkers(data = listings_geo, clusterOptions = markerClusterOptions(),
group = "Listings") %>%
addLayersControl(
baseGroups = c("Default", "Toner", "Nat Geo"),
overlayGroups = c("Ward","Listings", "London loop", "Capital loop"))
Building Dashboards with shinydashboard

User selection, rendered

Leaflet map with user selection.

Building Dashboards with shinydashboard

Let's practice!

Building Dashboards with shinydashboard

Preparing Video For Download...