Skip to content

Instantly share code, notes, and snippets.

@mdsumner
Created March 24, 2022 00:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mdsumner/eab05cc75176add545859054f3aa8bf4 to your computer and use it in GitHub Desktop.
Save mdsumner/eab05cc75176add545859054f3aa8bf4 to your computer and use it in GitHub Desktop.
#' Create polygon region from raster intervals
#' 
#' @param x raster layer
#' @param lo low values (paired with hi to define intervals)
#' @param hi high values 
#' @param auto default `FALSE`, set to true to define hi/lo automatically
#' @examples
#' f <- system.file("ex/elev.tif", package="terra")
#' r <- rast(f)
#' p <- isoband_raster(r)  
#' library(terra)
#' plot(vect(isoband_raster(r, auto = TRUE)))
isoband_raster <- function(x, lo, hi, auto = FALSE) {
  if (auto) {
    breaks <- pretty(values(x))
    lo <- head(breaks, -1)
    hi <- tail(breaks, -1)
  }
  b <- isoband::isobands(xFromCol(x, seq_len(dim(x)[2L])), yFromRow(x, seq_len(dim(x)[1L])), as.matrix(x[[1]], wide = TRUE), levels_low = lo, levels_hi = hi)
  sf::st_sf(lo = lo, hi = hi, geometry  = sf::st_sfc(isoband::iso_to_sfg(b), crs = crs(x)))
}
@mdsumner
Copy link
Author

image

@mdsumner
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment