Skip to contents

This dataset shows boundaries of municipalities in Spain.

Usage

esp_get_munic_siane(
  year = Sys.Date(),
  epsg = 4258,
  cache = TRUE,
  update_cache = FALSE,
  cache_dir = NULL,
  verbose = FALSE,
  resolution = c(3, 6.5, 10),
  region = NULL,
  munic = NULL,
  moveCAN = TRUE,
  rawcols = FALSE
)

Source

CartoBase ANE provided by Instituto Geografico Nacional (IGN), http://www.ign.es/web/ign/portal. Years available are 2005 up to today.

Copyright: https://centrodedescargas.cnig.es/CentroDescargas/cartobase-ane

It's necessary to always acknowledge authorship using the following formulas:

  1. When the original digital product is not modified or altered, it can be expressed in one of the following ways:

    • CartoBase ANE 2006-2024 CC-BY 4.0 ign.es

    • CartoBase ANE 2006-2024 CC-BY 4.0 Instituto Geográfico Nacional

  2. When a new product is generated:

  • Obra derivada de CartoBase ANE 2006-2024 CC-BY 4.0 ign.es

Data distributed via a custom CDN, see https://github.com/rOpenSpain/mapSpain/tree/sianedata.

Arguments

year

character string or number. Release year, it must be in formats YYYY (assuming end of year) or YYYY-MM-DD. Historical information starts as of 2005.

epsg

character string or number. Projection of the map: 4-digit EPSG code. One of:

cache

logical. Whether to do caching. Default is TRUE. See Caching strategies section in esp_set_cache_dir().

update_cache

logical. Should the cached file be refreshed? Default is FALSE. When set to TRUE, it will force a new download.

cache_dir

character string. A path to a cache directory. See Caching strategies section in esp_set_cache_dir().

verbose

logical. If TRUE displays informational messages.

resolution

character string or number. Resolution of the geospatial data. One of:

  • "10": 1:10 million.

  • "6.5": 1:6.5 million.

  • "3": 1:3 million.

region

Optional. A vector of region names, NUTS or ISO codes (see esp_dict_region_code()).

munic

character string. A name or regex expression with the names of the required municipalities. NULL will return all municipalities.

moveCAN

A logical TRUE/FALSE or a vector of coordinates c(lat, lon). It places the Canary Islands close to Spain's mainland. Initial position can be adjusted using the vector of coordinates. See Displacing the Canary Islands in esp_move_can().

rawcols

logical. Setting this to TRUE will add the raw columns of the resulting object as provided by IGN.

Value

A sf object.

Details

When using region you can use and mix names and NUTS codes (levels 1, 2 or 3), ISO codes (corresponding to level 2 or 3) or "cpro" (see esp_codelist).

When calling a higher level (province, CCAA or NUTS1), all the municipalities of that level will be added.

Note

Although mapSpain supplies cartographically suitable datasets, a historical database of Spanish municipal boundaries is also available, offering higher‑resolution geometries that may be more appropriate for GIS‑oriented workflows:

Examples

# \donttest{
# Municipalities that have changed in the past: three cuts
munis2005 <- esp_get_munic_siane(year = 2005, rawcols = TRUE)
munis2015 <- esp_get_munic_siane(year = 2015, rawcols = TRUE)
munis2024 <- esp_get_munic_siane(year = 2024, rawcols = TRUE)

# manipulate
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
allmunis_unique <- bind_rows(munis2005, munis2015, munis2024) |>
  distinct()

id_all <- allmunis_unique |>
  sf::st_drop_geometry() |>
  group_by(id_ine, name) |>
  count() |>
  ungroup() |>
  arrange(desc(n)) |>
  slice_head(n = 1) |>
  glimpse()
#> Rows: 1
#> Columns: 3
#> $ id_ine <chr> "18020"
#> $ name   <chr> "Arenas del Rey"
#> $ n      <int> 3

library(ggplot2)
allmunis_unique |>
  filter(id_ine == id_all$id_ine) |>
  ggplot() +
  geom_sf(aes(fill = as.factor(fecha_alta)),
    alpha = 0.7,
    show.legend = FALSE
  ) +
  scale_fill_viridis_d() +
  facet_wrap(~fecha_alta) +
  labs(
    title = id_all$name,
    subtitle = "Changes on boundaries over time",
    fill = ""
  )

# }