Skip to contents

Get geotagged images from the Spanish Cadastre. This function is a wrapper of mapSpain::esp_getTiles().


  what = "building",
  styles = "default",
  update_cache = FALSE,
  cache_dir = NULL,
  verbose = FALSE,
  crop = FALSE,
  options = NULL,



See Details. It could be:

  • A numeric vector of length 4 with the coordinates that defines the bounding box: c(xmin, ymin, xmax, ymax)

  • A sf/sfc object, as provided by the sf package.


SRS/CRS to use on the query. To check the admitted values check catr_srs_values, specifically the wfs_service column. See Details.


Layer to be extracted. Possible values are "building", "parcel", "zoning", "address". See Details.


Style of the WMS layer. See Details.


A logical whether to update cache. Default is FALSE. When set to TRUE it would force a fresh download of the source file.


A path to a cache directory. On missing value the function would store the cached files on a temporary dir (See base::tempdir()).


Logical, displays information. Useful for debugging, default is FALSE.


TRUE if results should be cropped to the specified x extent, FALSE otherwise. If x is an sf object with one POINT, crop is set to FALSE.


A named list containing additional options to pass to the query.


Arguments passed on to mapSpain::esp_getTiles


Resolution (in pixels) of the final tile. Only valid for WMS.


A numeric value that indicates the expansion percentage of the bounding box of x.


Logical. Provides transparent background, if supported. Depends on the selected provider on type.


TRUE if the result should be masked to x.


A SpatRaster is returned, with 3 (RGB) or 4 (RGBA) layers. See terra::rast().


When x is a numeric vector, make sure that the srs matches the coordinate values. When x is a sf object, the value srs is ignored.

The query is performed using EPSG:3857 (Web Mercator) and the tile is projected back to the SRS of x. In case that the tile looks deformed, try either providing x or specify the SRS of the requested tile via the srs parameter, that ideally would need to match the SRS of x. See Examples.


The parameter what defines the layer to be extracted. The equivalence with the API Docs equivalence is:

  • "parcel": CP.CadastralParcel

  • "zoning": CP.CadastralZoning

  • "building": BU.Building

  • "buildingpart": BU.BuildingPart

  • "address": AD.Address

  • "admboundary": AU.AdministrativeBoundary

  • "admunit": AU.AdministrativeUnit


The WMS service provide different styles on each layer (what parameter). Some of the styles available are:

  • "parcel": styles : "BoundariesOnly", "ReferencePointOnly", "ELFCadastre".

  • "zoning": styles : "BoundariesOnly", "ELFCadastre".

  • "building" and "buildingpart": "ELFCadastre"

  • "address": "Number.ELFCadastre"

  • "admboundary" y "admunit": "ELFCadastre"

Check the API Docs for more information.


# \donttest{

# With a bbox

pict <- catr_wms_get_layer(c(222500, 4019500, 223700, 4020700),
  srs = 25830,
  what = "parcel"
#> Warning: downloaded length 0 != reported length 498
#> Warning: cannot open URL ',4019470,223730,4020730&styles=default': HTTP status was '403 Forbidden'
#> Error in download.file(url = q, destfile = filename, mode = "wb", quiet = !verbose): cannot open URL ',4019470,223730,4020730&styles=default'

#> Attaching package: 'tidyterra'
#> The following object is masked from 'package:stats':
#>     filter

ggplot() +
  geom_spatraster_rgb(data = pict)
#> Error in geom_spatraster_rgb(data = pict): object 'pict' not found

# With a spatial object

parcels <- catr_wfs_get_parcels_neigh_parcel("3662303TF3136B", srs = 25830)
#> Warning: downloaded length 0 != reported length 498
#> Warning: cannot open URL '': HTTP status was '403 Forbidden'
#> Warning: downloaded length 0 != reported length 498
#> Warning: cannot open URL '': HTTP status was '403 Forbidden'
#> Download failed
#> url 
#> not reachable.
#> Please try with another options. If you think this is a bug please consider opening an issue
#> Error in catr_hlp_dwnload(api_entry, filename, cache_dir = tempdir(),     verbose = verbose, update_cache = FALSE, cache = TRUE): 
#> Execution halted

# Use styles

parcels_img <- catr_wms_get_layer(parcels,
  what = "buildingpart",
  srs = 25830, # As parcels object
  bbox_expand = 0.3,
  styles = "ELFCadastre"
#> Error in get_sf_from_bbox(x, srs): object 'parcels' not found

ggplot() +
  geom_sf(data = parcels, fill = "blue", alpha = 0.5) +
  geom_spatraster_rgb(data = parcels_img)
#> Error in fortify(data): object 'parcels' not found
# }