Preparativos

Instalación de paquetes:

# Leaflet
install.packages("leaflet")

Carga de paquetes:

# Leaflet
library(leaflet)

# sf
library(sf)

Introducción

Leaflet es una de las bibliotecas más utilizadas para la creación de mapas interactivos en la Web. Está escrita en el lenguaje JavaScript y también puede utilizarse a través de otros lenguajes de programación, como Python y R.

El paquete Leaflet permite acceder la funcionalidad de Leaflet a través de R. Entre las capacidades que proporciona Leaflet están:

  • Capas base (ej. OpenStreetMap, Stamen, ESRI).
  • Capas vectoriales y raster.
  • Mapas temáticos (ej. coropletas).
  • Marcadores.
  • Acercamientos (zoom in) y alejamientos (zoom out).
  • Leyendas.
  • Escalas.

Uso básico

Los pasos básicos para la creación de un mapa con Leaflet son: 1. Crear un widget mediante un llamado a la función leaflet(). 2. Añadir capas (mapas base, marcadores, puntos, líneas, polígonos, etc.). 3. Añadir controles (ej. leyenda, escala). 4. Desplegar el mapa.

El siguiente ejemplo ilustra estos pasos:

# Definición de mapa con capa base y con marcador 
m <- leaflet() %>%
  addTiles() %>%  # Añadir capa base
  addMarkers(lng=-84.0427264, lat=9.9380638, popup="Escuela de Geografía de la Universidad de Costa Rica") 

# Despliegue del mapa
m

Capas base

El método addProviderTiles() permite añadir mapas de teselas, generalmente como capas base de un mapa. El sitio Leaflet Provider Demo proporciona una lista de capas base que pueden utilizarse.

# Definición de mapa con capa base y con marcador 
m <- leaflet() %>%
  addTiles() %>%
  addProviderTiles(providers$Stamen.TonerLite, group = "Stamen Toner Lite") %>%
  addProviderTiles(providers$OpenStreetMap.Mapnik, group = "OpenStreetMap") %>%  
  addMarkers(lng=-84.0427264, lat=9.9380638, popup="Escuela de Geografía de la Universidad de Costa Rica") %>%  
  addLayersControl(baseGroups = c("OpenStreetMap", "Stamen Toner Lite", "Imágenes de ESRI"))
# Despliegue del mapa
m

Controles

El siguiente ejemplo ilustra el uso de método para añadir controles, como addLayersControl() (leyenda) y addMiniMapl() (mapa de referencia). También se ejemplifica el uso de addCircleMarkers().

mammalia = st_read("https://raw.githubusercontent.com/geoprocesamiento-2020i/datos/master/biodiversidad/registros-presencia/cr/gam/mammalia.geojson")
## Reading layer `mammalia-amphibia-reptilia-aves-plantae' from data source `https://raw.githubusercontent.com/geoprocesamiento-2020i/datos/master/biodiversidad/registros-presencia/cr/gam/mammalia.geojson' using driver `GeoJSON'
## Simple feature collection with 1140 features and 5 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -84.45085 ymin: 9.74913 xmax: -83.76667 ymax: 10.11853
## geographic CRS: WGS 84
m <- leaflet() %>% 
  addProviderTiles(providers$Esri.WorldImagery, group = "Imágenes de ESRI") %>% 
  addProviderTiles(providers$Stamen.TonerLite, group = "Stamen Toner Lite") %>%
  addProviderTiles(providers$OpenStreetMap.Mapnik, group = "OpenStreetMap") %>%
  addCircleMarkers(data = mammalia,
                   stroke = F,
                   radius = 4,
                   fillColor = 'red',
                   fillOpacity = 1,
                   popup = paste(mammalia$order, mammalia$species, sep = '<br/>')) %>%
  addLayersControl(baseGroups = c("OpenStreetMap", "Stamen Toner Lite", "Imágenes de ESRI")) %>%
  addMiniMap(
    toggleDisplay = TRUE,
    tiles = providers$Stamen.TonerLite
  )

# Despliegue del mapa
m