Get started with bcmaps



bcmaps is an R package of spatial map layers for British Columbia.

bcmaps provides access to various spatial layers of British Columbia, such as administrative boundaries, natural resource management boundaries, watercourses, census boundaries, etc. All layers are available as sf objects in the BC Albers projection, which is the B.C. Government standard.

Most layers are accessed directly from the B.C. Data Catalogue using the bcdata R package under the hood. See each layer’s individual help file for more detail.

IMPORTANT NOTE Support for Spatial objects (sp) was removed in {bcmaps} v1.3.0. Please use sf objects with {bcmaps}. A discussion on the evolution of the spatial software stack in R can be found here:


To see the layers that are available, run the available_layers() function:


Most layers are accessible by a shortcut function by the same name as the object. Then you can use the data as you would any sf object. The first time you try to access a layer, you will be prompted for permission to download that layer to your hard drive. Subsequently that layer is available locally for easy future access. For example:


bc <- bc_bound()

A simple map of the outline of British Columbia.

There are two British Columbia boundary map layers available in bcmaps:

Simple Features objects

By default, all layers are returned as sf spatial objects:


# Load and plot the boundaries of B.C.

bc <- bc_bound()

## Next load the Regional Districts data, then extract and plot the Kootenays
rd <- regional_districts()
kootenays <- rd[rd$ADMIN_AREA_NAME == "Regional District of Central Kootenay", ]
plot(st_geometry(kootenays), col = "lightseagreen", add = TRUE)

A map of the outline of British Columbia, with the Regional District of Central Kootenay in the Southeastern part of the province shaded in green.

Digital Elevation Model for British Columbia 1:250,000

The cded_raster and cded_stars functions return the 1:250,000 digital elevation model for British Columbia bounded by some area of interest. Here we are retrieving the area bounded by the Logan Lake census subdivision:


aoi <- census_subdivision()[census_subdivision()$CENSUS_SUBDIVISION_NAME == "Logan Lake", ]
aoi_raster <- cded_raster(aoi)

A digital elevation map of a subset of B.C. (Logan Lake Census Subdivision) with high elevation in green and low elevation in pink.

It’s a beautiful day in the neighbourhood

A handy layer for creating maps for display is the bc_neighbours layer, accessible with the function by the same name. This example also illustrates using the popular ggplot2 package to plot maps in R using geom_sf and the bc_cities() function available in bcmaps:

ggplot() +
  geom_sf(data = bc_neighbours(), mapping = aes(fill = name)) +
  geom_sf(data = bc_cities()) +
  coord_sf(datum = NA) +
  scale_fill_viridis_d(name = "Jurisdiction") +