An R package of spatial map layers for British Columbia.
Provides access to various spatial layers of British Columbia, such as
administrative boundaries, natural resource management boundaries,
watercourses etc. All layers are available in the BC
Albers
projection, which is the B.C. Government standard as sf
or Spatial
objects.
Layers are stored in the bcmapsdata package and loaded by this package, following the strategy recommended by Anderson and Eddelbuettel.
You can install bcmaps
from CRAN:
install.packages("bcmaps")
To install the development version of the bcmaps
package, you need to
install the remotes
package then the bcmaps
package.
install.packages("remotes")
remotes::install_github("bcgov/bcmaps")
To get full usage of the package, you will also need to install the bcmapsdata package, which holds all of the datasets.
Note that unlike most packages it is not necessary to actually load the
bcmapsdata package (i.e., with library(bcmapsdata)
) - in fact it
is less likely to cause problems if you don’t.
install.packages('bcmapsdata', repos='https://bcgov.github.io/drat/')
To see the layers that are available, run the available_layers()
function:
#> Loading required package: sf
#> Linking to GEOS 3.6.1, GDAL 2.1.3, PROJ 4.9.3
library(bcmaps)
available_layers()
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
or Spatial
object. For example:
library(sf)
bc <- bc_bound()
plot(st_geometry(bc))
Alternatively, you can use the get_layer
function - simply type
get_layer('layer_name')
, where 'layer_name'
is the name of the layer
of interest. The get_layer
function is useful if the back-end
bcmapsdata
package has had a layer added to it, but there is as yet no
shortcut function created in bcmaps
.
library(sf)
library(dplyr)
ws <- get_layer("wsc_drainages", class = "sf")
plot(ws["SUB_SUB_DRAINAGE_AREA_NAME"], key.pos = NULL)
By default, all layers are returned as sf
spatial
objects:
library(bcmaps)
library(sf)
# Load and plot the boundaries of B.C.
bc <- bc_bound()
plot(st_geometry(bc))
## 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 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
:
library(ggplot2)
ggplot() +
geom_sf(data = bc_neighbours(), mapping = aes(fill = name)) +
geom_sf(data = bc_cities()) +
coord_sf(datum = NA) +
scale_fill_discrete(name = "Jurisdiction") +
theme_minimal()
As of version 0.15.0 the B.C. BEC (Biogeoclimatic Ecosystem
Classification) map is available via the bec()
function, and an
accompanying function bec_colours()
function to colour it:
bec <- bec()
library(ggplot2)
ggplot() +
geom_sf(data = bec[bec$ZONE %in% c("BG", "PP"),],
aes(fill = ZONE, col = ZONE)) +
scale_fill_manual(values = bec_colors()) +
scale_colour_manual(values = bec_colours())
If you aren’t using the sf
package and prefer the old standard
sp
way of doing things, set
class = "sp"
in either get_layer
or the shortcut functions:
library("sp")
# Load watercourse data and plot with boundaries of B.C.
plot(get_layer("bc_bound", class = "sp"))
plot(watercourses_15M(class = "sp"), add = TRUE)
We have written a short vignette on plotting points on one of the layers
from bcmaps
. You can view the vignette online
here
or if you installed the package you can open it using
browseVignettes("bcmaps")
.
The package also contains a couple of handy utility functions:
fix_geo_problems()
for fixing invalid topologies insf
orSpatial
objects such as orphaned holes and self-intersectionstransform_bc_albers()
for transforming anysf
orSpatial
object to BC Albers projection.self_union()
Union aSpatialPolygons*
object with itself to remove overlaps, while retaining attributes
To report bugs/issues/feature requests, please file an issue.
Pull requests of new B.C. layers are welcome. If you would like to contribute to the package, please see our CONTRIBUTING guidelines.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
The source datasets used in this package come from various sources under
open licences, including DataBC (Open
Government Licence - British
Columbia)
and Statistics Canada
(Statistics Canada Open Licence
Agreement). See the
data-raw
folder for details on each source dataset.
# Copyright 2017 Province of British Columbia
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and limitations under the License.
This repository is maintained by Environmental Reporting BC. Click here for a complete list of our repositories on GitHub.