R/st_filter_spatial.R

#' Filter one set of geometries based on another
#'
#' @param x geometries to filter
#' @param y geometries to filter by
#' @param datum intermediate datum for projection
#' @param fun predicate function; defaults to `st_intersection`
#' @param view logical; show results in Rstudio viewer?
#' @param verbose logical
#'
#' @export
st_filter_spatial <- function (
  x,
  y,
  datum = st_crs(32610),
  fun = st_intersection,
  view = FALSE,
  verbose = getOption("verbose")
) {

  msg <- function (...) if (isTRUE(verbose)) message("[st_filter_spatial] ", ...)

  msg("spatially filtering n = ", nrow(x), " geometries based on m = ", nrow(y), " geometries")
  filtered <- fun(st_transform(x, datum), st_transform(y, datum))

  msg("repairing spatially filtered geometries")
  repaired <- st_repair(filtered)

  reprojected <- st_transform(repaired, st_crs(x))

  if (isTRUE(view)) mapview::mapview(reprojected)

  return(reprojected)

}
BAAQMD/geotools documentation built on Feb. 29, 2024, 5:44 a.m.