10 Spatial Analysis
10.1 Packages
These days, the recommendation is to use sf (instead of sp) and
terra (instead of raster). The sf package is great and should no
doubt be used instead of sp. It drops easily into ggplot2 and other packages.
terra may need to be converted to a raster for compatibility with
some packages or functions.
10.1.3 raster
10.1.3.1 Cropping a raster
To crop a raster to the extent of relocations:
## Packages
library(data.table)
library(raster)
library(rasterVis)
library(ggplot2)
## Load data
# DT is a data.table
load('data/DT.rda')
# DEM is a raster
load('data/dem.rda')
## Plot
# Plot raster and points
gplot(dem) +
geom_tile(aes(fill = value)) +
geom_point(aes(X, Y), data = DT)
## Crop to points
cropped <- crop(dem, DT[, as.matrix(cbind(X, Y))])
gplot(cropped) +
geom_tile(aes(fill = value)) +
geom_point(aes(X, Y), data = DT)If you’d like to buffer the points first, use sf.
10.2 Spatial data
Open sources: Open Street Map, Natural Earth, Canadian Government, Provincial Governments.
Examples of downloading and preparing spatial data from these sources in the study-area-figures repository (*-prep.R scripts). Packages used for downloading data include: osmdata, rnaturalearth and curl.
Recently from rOpenSci, Dilinie Seimon, Varsha Ujjinni Vijay Kumar highlighted many collections of open spatial data, from land cover to administrative boundaries and air pollution to malaria: https://rspatialdata.github.io/, https://ropensci.org/blog/2021/09/28/rspatialdata/
10.3 Distance to
Calculating distance to something, eg. distance from moose relocations to the
nearest road, using Alec’s distanceto package.
It can be installed with the following code
install.packages('distanceto', repos = 'https://robitalec.r-universe.dev')
library(distanceto)
library(sf)
points <- st_read('some-point.gpkg')
lakes <- st_read('nice-lakes.gpkg')
distance_to(points, lakes)Here are the docs: https://robitalec.github.io/distance-to/