Before you start
In this chapter we learn the spatial interactions of a vector and raster dataset. We first look at how to crop (spatially subset) a raster dataset based on the geographic extent of a vector dataset. We then cover how to extract values from raster data for points and polygons. To be precise, here is what we mean by raster data extraction and what it does for points and polygons data:
Points: For each of the points, find which raster cell it is located within, and assign the value of the cell to the point.
Polygons: For each of the polygons, identify all the raster cells that intersect with the polygon, and assign a vector of the cell values to the polygon
This is probably the most important operation economists run on raster datasets.
We will show how we can use terra::extract()
for both cases. But, we will also see that for polygons, exact_extract()
from the exactextractr
package is often considerably faster than terra::extract()
.
Finally, you will see conversions between Raster
\(^*\) (raster
package) objects and SpatRaster
object (terra
package) because of the incompatibility of object classes across the key packages. I believe that these hassles will go away soon when they start supporting each other.
Direction for replication
Datasets
All the datasets that you need to import are available here. In this chapter, the path to files is set relative to my own working directory (which is hidden). To run the codes without having to mess with paths to the files, follow these steps:
- set a folder (any folder) as the working directory using
setwd()
- create a folder called “Data” inside the folder designated as the working directory (if you have created a “Data” folder previously, skip this step)
- download the pertinent datasets from here
- place all the files in the downloaded folder in the “Data” folder
Packages
Run the following code to install or load (if already installed) the pacman
package, and then install or load (if already installed) the listed package inside the pacman::p_load()
function.
if (!require("pacman")) install.packages("pacman")
::p_load(
pacman# handle raster data
terra, # handle raster data
raster, # fast extractions
exactextractr, # vector data operations
sf, # data wrangling
dplyr, # data wrangling
tidyr, # data wrangling
data.table, # download PRISM data
prism, # timing codes
tictoc, # to get county sf
tigris, # for mapping
tmap )