La librería mapSpain para el acceso a información espacial en R permite acceder a un catalogo de datos espaciales en abierto de España para su descarga. Los datos provienen principalmente de la base de datos GISCO de Eurostat y la CartoBase SIANE del Instituto Geográfico Nacional. Permite obtener y descargar la información espacial en formatos estandar de R y posteriormente exportarla a los distintos formatos (.shp, .gpkg, etc.).
Funcionalidades principales de mapSpain
mapSpain es una librería de R que te permite trabajar con datos espaciales de España de una forma sencilla y eficiente. Además de visualizar los límites administrativos de España, puedes usar esta librería para hacer otras cosas, como:
- Obtener capas de información espacial desde repositorios oficiales: datos demográficos, económicos, sociales, etc.
- Crear mapas temáticos o mapas de coropletas, que muestran la distribución de una variable por zonas geográficas.
- Descargar y procesar teselas estáticas de instituciones públicas de España como imágenes a una determinada resolución.
- Representar la información a través de otras librerías como leaflet.
- Permite añadir teselas de instituciones públicas de España: IGN, CNIG, ICV o IDEE.
Además, te permite obtener y visualizar los límites administrativos de España a varios niveles (comunidades autónomas, provincias, municipios) utilizando el formato estándar sf y la posibilidad de descargar y procesar teselas estáticas. En este artículo, te voy a mostrar cómo puedes usar esta librería para explorar y analizar datos espaciales de España con R.
Acceso a datos con mapSpain
# Instalar mapSpain desde CRAN
install.packages("mapSpain")
# Cargar mapSpain
library(mapSpain)Una vez cargada la librería, vamos a cargar el objeto nuts, que contiene las divisiones administrativas de la Nomenclatura de las Unidades Territoriales Estadísticas (NUTS), correspondientes a las comunidades autónomas (CCAA) y provincias en los niveles 2 y 3.
# Ver la estructura del objeto esp_nuts.sf
nuts <- esp_nuts.sf
print(nuts)## Simple feature collection with 86 features and 9 fields
## Geometry type: GEOMETRY
## Dimension: XY
## Bounding box: xmin: -18.15997 ymin: 27.63848 xmax: 4.320511 ymax: 43.78793
## Geodetic CRS: ETRS89
## First 10 features:
## COAST_TYPE FID NUTS_NAME MOUNT_TYPE NAME_LATN
## 12 0 ES ESPAÑA 0 ESPAÑA
## 69 0 ES4 CENTRO (ES) 0 CENTRO (ES)
## 70 0 ES7 CANARIAS 0 CANARIAS
## 81 0 ES2 NORESTE 0 NORESTE
## 83 0 ES1 NOROESTE 0 NOROESTE
## 84 0 ES3 COMUNIDAD DE MADRID 0 COMUNIDAD DE MADRID
## 85 0 ES6 SUR 0 SUR
## 86 0 ES5 ESTE 0 ESTE
## 137 0 ES53 Illes Balears 0 Illes Balears
## 173 0 ES12 Principado de Asturias 0 Principado de Asturias
## CNTR_CODE URBN_TYPE NUTS_ID LEVL_CODE geometry
## 12 ES 0 ES 0 MULTIPOLYGON (((-7.699736 4...
## 69 ES 0 ES4 1 MULTIPOLYGON (((-4.737023 4...
## 70 ES 0 ES7 1 MULTIPOLYGON (((-16.12726 2...
## 81 ES 0 ES2 1 MULTIPOLYGON (((-2.412847 4...
## 83 ES 0 ES1 1 MULTIPOLYGON (((-7.699736 4...
## 84 ES 0 ES3 1 MULTIPOLYGON (((-3.067689 4...
## 85 ES 0 ES6 1 MULTIPOLYGON (((-1.02687 38...
## 86 ES 0 ES5 1 MULTIPOLYGON (((0.858215 42...
## 137 ES 0 ES53 2 MULTIPOLYGON (((3.176714 39...
## 173 ES 0 ES12 2 MULTIPOLYGON (((-4.512301 4...También es posible acceder al objeto esp_munic.sf que contiene la información espacial a nivel municipal. A través de esta capa podemos obtener información de distintos campos de interés.
# Ver la estructura del objeto esp_munic.sf
municipios <- esp_munic.sf
print(municipios)## Simple feature collection with 8131 features and 7 fields
## Geometry type: GEOMETRY
## Dimension: XY
## Bounding box: xmin: -18.15999 ymin: 27.63814 xmax: 4.32409 ymax: 43.7889
## Geodetic CRS: ETRS89
## First 10 features:
## codauto ine.ccaa.name cpro ine.prov.name cmun name LAU_CODE
## 382 01 Andalucía 04 Almería 001 Abla 04001
## 379 01 Andalucía 04 Almería 002 Abrucena 04002
## 374 01 Andalucía 04 Almería 003 Adra 04003
## 375 01 Andalucía 04 Almería 004 Albánchez 04004
## 358 01 Andalucía 04 Almería 005 Alboloduy 04005
## 373 01 Andalucía 04 Almería 006 Albox 04006
## 350 01 Andalucía 04 Almería 007 Alcolea 04007
## 364 01 Andalucía 04 Almería 008 Alcóntar 04008
## 352 01 Andalucía 04 Almería 009 Alcudia de Monteagud 04009
## 349 01 Andalucía 04 Almería 010 Alhabia 04010
## geometry
## 382 POLYGON ((-2.77744 37.23836...
## 379 POLYGON ((-2.88984 37.09213...
## 374 POLYGON ((-2.93161 36.75079...
## 375 POLYGON ((-2.13138 37.29959...
## 358 POLYGON ((-2.70077 37.09674...
## 373 POLYGON ((-2.15335 37.54576...
## 350 POLYGON ((-3.05663 36.88506...
## 364 POLYGON ((-2.65344 37.33238...
## 352 POLYGON ((-2.27371 37.2416,...
## 349 POLYGON ((-2.5425 36.97485,...Por tanto, a través de esta librería podemos acceder a información espacial de carácter administrativo como pueden ser los límites estatales, comunidades autónomas, provincias, comarcas y/o municipios .
Estandar sf
Los objetos utilizados por mapSpain son del tipo simple features (sf). Este modelo de datos refiere al ISO 19125-1:2004, que establece una arquitectura común para la información espacial. Es decir, este formato es compatible con el paquete sf y con otras librerías que trabajan con datos espaciales en R, por lo que podemos utilizar estos datos junto a otras librerías.
Recuerda:
A partir de octubre, las librerías rgdal, rgeos y maptools serán retiradas y sus funciones serán sustituidas por otras librerías, entre ellas sf y terra. Si quieres saber más, tal vez te interese la nueva actualización del Curso de Análisis Espacial con R.
Puedes ver la estructura de datos del objeto con el comando str:
#Estructura del elemento municipios
str(municipios)## Classes 'sf' and 'data.frame': 8131 obs. of 8 variables:
## $ codauto : chr "01" "01" "01" "01" ...
## $ ine.ccaa.name: chr "Andalucía" "Andalucía" "Andalucía" "Andalucía" ...
## $ cpro : chr "04" "04" "04" "04" ...
## $ ine.prov.name: chr "Almería" "Almería" "Almería" "Almería" ...
## $ cmun : chr "001" "002" "003" "004" ...
## $ name : chr "Abla" "Abrucena" "Adra" "Albánchez" ...
## $ LAU_CODE : chr "04001" "04002" "04003" "04004" ...
## $ geometry :sfc_GEOMETRY of length 8131; first list element: List of 1
## ..$ : num [1:31, 1:2] -2.78 -2.78 -2.76 -2.75 -2.75 ...
## ..- attr(*, "class")= chr [1:3] "XY" "POLYGON" "sfg"
## - attr(*, "sf_column")= chr "geometry"
## - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA
## ..- attr(*, "names")= chr [1:7] "codauto" "ine.ccaa.name" "cpro" "ine.prov.name" ...Cada objeto tiene una columna llamada geometry que contiene las coordenadas de los polígonos que definen los límites. También tiene otras columnas con información adicional:
- codauto: código de la comunidad autónoma
- ine.ccaa.name: nombre de la comunidad autónoma
- cpro: código de la provincia
- ine.prov.name: nombre de la provincia
- cmun: código del municipio
- name: nombre del municipio
- LAU_CODE: combinación de código cpro y cmun (equivalente a código INE)
Para visualizar estos objetos, podemos utilizar la función plot de R:
# Visualizar el mapa de las CCAA con plot
plot(nuts)
Al ser objetos espaciales compatibles con los formatos estándar, podemos utilizar otras librerías para ayudarnos de sus funcionalidades. Para ello vamos a utilizar la librería “leaflet” que nos permite crear un mapa de leaflet de forma rápida.
A través del mapa creado, podemos acceder a la información alfanumérica almacenada en cada objeto espacial, simplemente haciendo clic sobre el mapa:
# Visualizar capas de Comarcas y Rovincias
library(leaflet)
# Crear un mapa
m <- leaflet() %>%
addProviderTiles(providers$OpenStreetMap) # Agrega un proveedor de mapas (en este caso, OpenStreetMap)
# Agregar la capa espacial a tu mapa
m <- m %>%
addPolygons(
data = mapSpain::esp_get_comarca(),
fillColor = "green",
fillOpacity = 0.7,
color = "black",
weight = 1,
group = "Comarcas",
popup = ~paste(
"Comarca: ", name,
"<br>Provincia: ", ine.prov.name,
"<br>Comunidad Autónoma: ", ine.ccaa.name
)
) %>%
addPolygons(
data = mapSpain::esp_get_prov(),
fillColor = "gray",
fillOpacity = 0.7,
color = "black",
weight = 1,
group = "Provincias",
popup = ~paste(
"Provincia: ", ine.prov.name,
"<br>Comunidad Autónoma: ", nuts2.name
)
)Además, vamos a añadir un control de capas y un popup para poder identificar los objetos espaciales.
m <- m %>%
addLayersControl(
overlayGroups = c("Provincias","Comarcas"),
options = layersControlOptions(collapsed = FALSE)
)
mDescarga de tiles con mapSpain
La librería mapSpain, a través de la función esp_getTiles() permite obtener un objeto de tipo SpatRaster, con las teselas vectoriales de algunos servicios WMS disponibles. A través de este objeto podemos trabajar con las tiles e incluso descargarlas.
La función esp_tiles_providers permite obtener el listado de todos los servicios WMS disponibles:
#Obtención de los tiles disponibles
tiles = mapSpain::esp_tiles_providers
head(tiles,5)## $IDErioja
## $IDErioja$static
## $IDErioja$static$attribution
## [1] "CC BY 4.0 www.iderioja.org"
##
## $IDErioja$static$q
## [1] "https://rts.larioja.org/mapa-base/rioja/{z}/{x}/{y}.png"
##
## $IDErioja$leaflet
## $IDErioja$leaflet$attribution
## [1] "CC BY 4.0 <a href='https://www.iderioja.org'>www.iderioja.org</a>"
##
## $IDErioja.Base
## $IDErioja.Base$static
## $IDErioja.Base$static$attribution
## [1] "CC BY 4.0 www.iderioja.org"
##
## $IDErioja.Base$static$q
## [1] "https://rts.larioja.org/mapa-base/rioja/{z}/{x}/{y}.png"Una vez hemos localizado el servicio que queremos, podemos obtener ese servicio con la función esp_getTiles. La función debe utilizar un objeto sf para realizar un clip sobre un servicio. A continuación, se detalla cómo obtener el mapa base de la IDE para los municipios de Teruel utilizando la función esp_get_munic_siane, que nos permite identificar los municipios que conforman una región (comunidad autónoma, provincia, etc.).
#Selección de todos los municipios de la Rioja
teruel_municipios <- esp_get_munic_siane(region = "Teruel", epsg = 4326)
# mapview(teruel_municipios)
# Crear un mapa
m <- leaflet() %>%
addProviderTiles(providers$OpenStreetMap) # Agrega un proveedor de mapas (en este caso, OpenStreetMap)
# Agregar la capa espacial a tu mapa
m <- m %>%
addPolygons(
data = teruel_municipios,
fillColor = "green",
fillOpacity = 0.7,
color = "black",
weight = 1,
group = "Municipios",
popup = ~paste(
"Municipio: ", name
)
)
m <- m %>%
addLayersControl(
overlayGroups = c("Municipios"),
options = layersControlOptions(collapsed = FALSE)
)
mAhora utilizamos la función indicada para obtener las teselas del IGN para esa zona. Establecemos el parámetro zoommin en 5 para que tengan algo más de detalle.
#Obtención del mapa base de IDErioja
base_teruel <- esp_getTiles(teruel_municipios, "IGNBase",
bbox_expand = 0.1,
zoommin = 5
)Ahora, vamos a guardar el tileado en un archivo ráster “.tif”. Para ello vamos a cargar la librería terra y la función writeRaster.
#Cargar librería terra
library(terra)#Concatenar ruta salida
file <- file.path(r"(C:\Users\Win10\Downloads)","tiles_teruel.tif")
terra::writeRaster(base_teruel, file, filetype = "GTiff", overwrite = TRUE)Vamos a abrir el archivo con QGIS para comprobar que la exportación se ha realizado correctamente:

Resumen de funciones de mapSpain para el acceso a información espacial
A continuación, os dejamos un listado de funciones destacadas de mapSpain:
- Información administrativa
- Límites de España
- Comunidades autónomas
- Provincias
- Comarcas
- Municipios
- Centro de poder del municipio (ayuntamiento)
- Mapa simplificado de Provincias y Comunidades de España
- Información temática de referencia a nivel estatal
- Ríos, canales, embalses y otros humedales de España. La información puede ser obtenido en formato líneas o polígonos.
- Demarcaciones de cuencas hidrográficas.
- Hipsometría y batimetría.
- Vías de ferrocarril. Permite diferenciar por tipos (ferrocarriles autonómicos, vía ancha, vía doble y via simple) y estado de electrificación.
- Principales carreteras de España: autopistas de peaje, autopistas, autovías y doble calzada, red de carreteras del Estado y otras carreteras.
- Representación espacial
- Grids de referencia IGN (en distintas proyecciones y dividido por ámbitos: Península y Baleares, Ceuta y Melilla y Canarias)
- MTN25
- MTN50
- Otros grids:
- Banco de Datos de la Naturaleza (BDN)
- Agencia Europa del Medioambiente (EEA)
- Centro Europeo de Datos del Suelo (ESDAC)
- Otros
- Grid hexagonal
- Grid en cuadrícula
- Listado de servicios WMS y WMTS libres de España
- Otras
- Traducción de nombres
- Líneas o polígonos para la inserción de las Islas Canarias
En definitiva, mapSpain permite el acceso a información espacial en R y se convierte en una herramienta valiosa para aquellos que trabajan con datos geoespaciales de España. Facilita la descarga, manipulación y análisis de datos geoespaciales, lo que lo convierte en una herramienta imprescindible para trabajar en R. Si deseas trabajar con información espacial oficial, mapSpain te puede ayudar.
Si quieres saber más sobre esta librería puedes consultar el Curso de Análisis Espacial con R.
Referencias
Hernangómez D (2023). mapSpain: Administrative Boundaries of Spain. doi:10.5281/zenodo.5366622, https://ropenspain.github.io/mapSpain/.
¿Quieres comentarnos algo? Adelante!