knitr::opts_chunk$set( collapse = TRUE, comment = "#>", warning = FALSE, message = FALSE, dpi = 300, tidy = "styler", dev = "ragg_png", out.width = "100%" ) # Cache for articles library(mapSpain) initcache <- mapSpain::esp_detect_cache_dir() cache_dir_here <- file.path(getwd(), "artcache") esp_set_cache_dir(cache_dir_here, verbose = FALSE)
mapSpain facilita la creación de mapas de los diferentes niveles administrativos de España.
Además, proporciona también la posibilidad de usar imágenes de servicios WMS/WMTS de manera estática (como imagen georeferenciada) o dinámica (en mapas leaflet).
Adicionalmente, mapSpain dispone de funciones que permiten normalizar nombres de las CCAA y provincias, lo que facilita el proceso de manipulación y transformación de datos (no necesariamente espaciales).
Las fuentes de información empleadas en mapSpain son:
Los objetos resultantes se proporcionan en formato sf
(librería sf) o
SpatRaster
(librería terra).
Página web: https://ropenspain.github.io/mapSpain/
install.packages("mapSpain", dependencies = TRUE)
Usando el r-universe:
# Enable this universe install.packages("mapSpain", repos = c( "https://ropenspain.r-universe.dev", "https://cloud.r-project.org" ), dependencies = TRUE )
remotes::install_github("rOpenSpain/mapSpain", dependencies = TRUE)
library(mapSpain) library(tidyverse) galicia <- esp_get_munic_siane(region = "Galicia") %>% # Homogeinizo labels mutate(Provincia = esp_dict_translate(ine.prov.name, "es")) ggplot(galicia) + geom_sf(aes(fill = Provincia), color = "grey70") + labs(title = "Provincias de Galicia") + scale_fill_discrete(type = hcl.colors(4, "Blues")) + theme_bw()
Si exploramos el dataset:
library(reactable) reactable(galicia, searchable = TRUE, striped = TRUE, filterable = TRUE, height = 350, elementId = "munis-galicia" )
Comparamos ahora mapSpain con otro paquete que proporciona objetos sf
o
SpatVector
de distintos paises:
library(sf) # manipulación de datos espaciales # rnaturalearth library(rnaturalearth) esp_rnat <- ne_countries("large", country = "Spain", returnclass = "sf") %>% st_transform(3857) # mapSpain esp_mapspain <- esp_get_country(epsg = 4326) %>% st_transform(3857) # geodata (GADM) library(geodata) esp_geodata <- geodata::gadm("ES", path = ".", level = 0) %>% # Convertimos de SpatVector a objecto sf sf::st_as_sf() %>% st_transform(3857) # geoboundaries library(rgeoboundaries) esp_rgeob <- gb_adm0("ESP") %>% st_transform(3857) # Imagen Ria Ferrol tile <- esp_get_munic_siane(munic = "Ferrol", epsg = 3857) %>% esp_getTiles("IGNBase.Gris", bbox_expand = 0.5, zoommin = 1) # Prepara el plot library(tidyterra) esp_all <- bind_rows(esp_rnat, esp_mapspain, esp_geodata, esp_rgeob) esp_all$source <- as_factor(c( "rnaturalearth", "mapSpain", "geodata (GADM)", "rgeoboundaries" )) ggplot(esp_all) + geom_spatraster_rgb(data = tile, maxcell = Inf) + geom_sf(aes(color = source, linetype = source), fill = NA, show.legend = "line", linewidth = 0.5, alpha = 0.7 ) + coord_sf( crs = 4326, xlim = c(-8.384421, -8.154413), ylim = c(43.43201, 43.59545), expand = FALSE ) + scale_color_manual(values = c("red", "black", "blue", "orange")) + scale_linetype_manual(values = c("solid", "dotted", "dashed", "twodash")) + theme_void() + labs(title = "Ría de Ferrol")
mapSpain es un paquete API que usa recursos web. El comportamiento por
defecto consiste en descargar archivos al directorio temporal tempdir()
para
su uso posterior durante la sesión.
La función esp_set_cache_dir()
permite modificar este comportamiento,
estableciendo un directorio de descarga específico para el usuario. Para hacer
esta configuración persistente se puede emplear el parámetro install = TRUE
esp_set_cache_dir("~/R/mapslib/mapSpain", install = TRUE, verbose = TRUE) #> mapSpain cache dir is: C:/Users/xxxxx/Documents/R/mapslib/mapSpain munic <- esp_get_munic_siane(verbose = TRUE) #> Cache dir is C:/Users/xxxxx/Documents/R/mapslib/mapSpain #> Downloading file from https://github.com/rOpenSpain/mapSpain/raw/sianedata/dist/se89_3_admin_muni_a_x.gpkg #> See https://github.com/rOpenSpain/mapSpain/tree/sianedata/ for more info #> trying URL 'https://github.com/rOpenSpain/mapSpain/raw/sianedata/dist/se89_3_admin_muni_a_x.gpkg' #> Content type 'application/octet-stream' length 5570560 bytes (5.3 MB) #> downloaded 5.3 MB #> Download succesful #> Reading from local file #> C:/Users/xxxxx/Documents/R/mapslib/mapSpain/se89_3_admin_muni_a_x.gpkg #> 5.3 Mb
mapSpain proporciona dos funciones relacionadas para trabajar con textos y códigos:
esp_dict_region_code()
convierte textos en códigos de CCAA y provincias.
Esquemas de codificación soportados:esp_dict_translate()
traduce textos a diferentes idiomas:Estas funciones pueden ser de utilidad en ámbitos más amplios que necesiten homogeneizar códigos de CCAA y Provincias (Datos COVID ISCII, etc).
esp_dict_region_code()
vals <- c("Errioxa", "Coruna", "Gerona", "Madrid") esp_dict_region_code(vals, destination = "nuts") esp_dict_region_code(vals, destination = "cpro") esp_dict_region_code(vals, destination = "iso2") # Desde ISO a otros códigos iso2vals <- c("ES-M", "ES-S", "ES-SG") esp_dict_region_code(iso2vals, origin = "iso2") iso2vals <- c("ES-GA", "ES-CT", "ES-PV") esp_dict_region_code(iso2vals, origin = "iso2", destination = "nuts") # Soporta diferentes niveles valsmix <- c("Centro", "Andalucia", "Seville", "Menorca") esp_dict_region_code(valsmix, destination = "nuts") esp_dict_region_code(c("Murcia", "Las Palmas", "Aragón"), destination = "iso2")
esp_dict_translate()
vals <- c("La Rioja", "Sevilla", "Madrid", "Jaen", "Orense", "Baleares") esp_dict_translate(vals, lang = "en") esp_dict_translate(vals, lang = "es") esp_dict_translate(vals, lang = "ca") esp_dict_translate(vals, lang = "eu") esp_dict_translate(vals, lang = "ga")
mapSpain contiene un set de funciones que permiten obtener límites políticos a diferentes niveles:
Para CCAA, Provinicas y Municipios hay dos versiones: esp_get_xxxx()
(fuente:
GISCO) y esp_get_xxxx_siane()
(fuente: IGN).
La información se proporciona en diferentes proyecciones y niveles de resolución.
esp <- esp_get_country(moveCAN = FALSE) ggplot(esp) + geom_sf(fill = "#f9cd94") + theme_light()
Por defecto, mapSpain "desplaza" Canarias para una mejor visualización en la
mayoría de sus funciones. Este comportamiento se puede desactivar usando
moveCAN = FALSE
(ver anterior ejemplo).
Proporcionamos funciones adicionales que permiten representar lineas alrededor de la inserción del mapa (ejemplos).
esp_can <- esp_get_country() can_prov <- esp_get_can_provinces() can_box <- esp_get_can_box() ggplot(esp_can) + geom_sf() + geom_sf(data = can_prov) + geom_sf(data = can_box)
Cuando se trabaja con imágenes, mapas interactivos o se desean realizar
analisis espaciales, se debe usar moveCAN = FALSE
nuts1 <- esp_get_nuts(resolution = 20, epsg = 3035, nuts_level = 1) ggplot(nuts1) + geom_sf() + labs(title = "NUTS1: Baja Resolución")
# Baleares NUTS3 nuts3_baleares <- c("ES531", "ES532", "ES533") paste(esp_dict_region_code(nuts3_baleares, "nuts"), collapse = ", ") nuts3_sf <- esp_get_nuts(region = nuts3_baleares) ggplot(nuts3_sf) + geom_sf(aes(fill = NAME_LATN)) + labs(fill = "Baleares: NUTS3") + scale_fill_viridis_d() + theme_minimal()
ccaa <- esp_get_ccaa(ccaa = c( "Catalunya", "Comunidad Valenciana", "Aragón", "Baleares" )) ccaa <- ccaa %>% mutate(ccaa_cat = esp_dict_translate(ine.ccaa.name, "ca")) ggplot(ccaa) + geom_sf(aes(fill = ccaa_cat)) + labs(fill = "Comunitats autònomes") + theme_minimal() + scale_fill_discrete(type = hcl.colors(4, "Plasma"))
*_siane
)Si pasamos una entidad de orden superior (e.g. Andalucia) obtenemos todas las provincias de esa entidad.
provs <- esp_get_prov_siane(c( "Andalucía", "Ciudad Real", "Murcia", "Ceuta", "Melilla" )) ggplot(provs) + geom_sf(aes(fill = prov.shortname.es), alpha = 0.9) + scale_fill_discrete(type = hcl.colors(12, "Cividis")) + theme_minimal() + labs(fill = "Provincias")
munic <- esp_get_munic(region = "Segovia") %>% # Datos de ejemplo: Población INE left_join(mapSpain::pobmun19, by = c("cpro", "cmun")) ggplot(munic) + geom_sf(aes(fill = pob19), alpha = 0.9, color = NA) + scale_fill_gradientn( colors = hcl.colors(100, "Inferno"), n.breaks = 10, labels = scales::label_comma(), guide = guide_legend() ) + labs( fill = "Habitantes", title = "Población en Segovia", subtitle = "Datos INE (2019)" ) + theme_void() + theme( plot.background = element_rect("grey80"), text = element_text(face = "bold"), plot.title = element_text(hjust = .5), plot.subtitle = element_text(hjust = .5) )
Disponibles como cuadrados y hexágonos, para provincias y CCAA.
cuad <- esp_get_hex_ccaa() hex <- esp_get_grid_prov() ggplot(cuad) + geom_sf() + geom_sf_text(aes(label = iso2.ccaa.code)) + theme_void() ggplot(hex) + geom_sf() + geom_sf_text(aes(label = iso2.prov.code)) + theme_void()
mapSpain permite usar también imágenes de mapas (satélite, mapas base, carreteras, etc.) proporcionados por diferentes organísmos públicos (https://www.idee.es/web/idee/segun-tipo-de-servicio).
Las imágenes se pueden emplear para la creación de mapas estáticos (imágenes
obtenidas como capas ráster de 3 o 4 bandas) o como fondo de mapas dinámicos, a
través del paquete leaflet
.
Los proveedores se han extraido del plugin para leaflet leaflet-providerESP.
Tenemos varias opciones que podemos emplear para componer mapas base:
madrid_munis <- esp_get_munic_siane(region = "Madrid", epsg = 3857) base_pnoa <- esp_getTiles(madrid_munis, "IGNBase.Todo", bbox_expand = 0.1, zoommin = 1 ) library(tidyterra) ggplot() + geom_spatraster_rgb(data = base_pnoa) + geom_sf( data = madrid_munis, color = "blue", fill = "blue", alpha = 0.25, linewidth = 0.5 ) + theme_minimal() + labs(title = "Municipios en Madrid") # Usando la opción mask madrid <- esp_get_munic_siane(munic = "^Madrid$", epsg = 3857) madrid_mask <- esp_getTiles(madrid, "IGNBase.Gris", mask = TRUE, crop = TRUE, zoommin = 2 ) ggplot() + geom_spatraster_rgb(data = madrid_mask) + theme_void() + labs( title = "Mapa Base de Madrid", caption = "CC BY 4.0 scne.es. Sistema Geográfico Nacional IGN" )
Estas capas se pueden usar también como fondo en mapas estáticos
stations <- esp_get_railway(spatialtype = "point", epsg = 4326) library(leaflet) leaflet(stations, elementId = "railway", width = "100%", height = "60vh" ) %>% addProviderEspTiles("IDErioja.Claro", group = "Base") %>% addProviderEspTiles("MTN", group = "MTN") %>% addProviderEspTiles("RedTransporte.Ferroviario", group = "Lineas Ferroviarias" ) %>% addMarkers( group = "Estaciones", popup = sprintf( "<strong>%s</strong>", stations$rotulo ) %>% lapply(htmltools::HTML) ) %>% addLayersControl( baseGroups = c("Base", "MTN"), overlayGroups = c("Lineas Ferroviarias", "Estaciones"), options = layersControlOptions(collapsed = FALSE) )
mapSpain incluye otras funciones adicionales que permiten extraer información sobre altitud, rios y cuencas hidrográficas de España, así líneas y puntos de infraestructuras de España, como carreteras y líneas ferroviarias.
# Restore cache esp_set_cache_dir(initcache, verbose = TRUE)
if (!require("sessioninfo")) { install.packages("sessioninfo") } sessioninfo::session_info()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.