extract_raster_at_points(pts, rasters)

Extract values from one or more raster layers at species occurrence or community points. Returns a data frame.

spatialextraction
Args:pts — sf or data.frame with lon/latrasters — SpatRaster or list of SpatRastersbuffer=NULL
extract_raster_at_points <- function(pts, rasters, buffer = NULL) {
  if (!requireNamespace("terra", quietly = TRUE)) install.packages("terra")
  if (!requireNamespace("sf",    quietly = TRUE)) install.packages("sf")
  library(terra); library(sf)
  
  if (!inherits(pts, "sf")) {
    pts <- st_as_sf(pts, coords = c("lon", "lat"), crs = 4326)
  }
  pts_v <- vect(pts)
  
  if (!inherits(rasters, "SpatRaster"))
    rasters <- rast(rasters)
  
  if (!is.null(buffer)) {
    vals <- terra::extract(rasters, pts_v, buffer = buffer, fun = mean, na.rm = TRUE)
  } else {
    vals <- terra::extract(rasters, pts_v)
  }
  
  cbind(as.data.frame(pts)[, 1, drop = FALSE], vals[, -1, drop = FALSE])
}