#' Convert a raster to a lines vector
#'
#' @description [as.lines()] converts a `GRaster` to a "lines" `GVector`. Before you apply this function, you may need to run [thinLines()] on the raster to reduce linear features to a single-cell width. You may also need to use [clean geometry][breakPolys] (especially the [removeDups()] and [removeDangles()]) afterward to remove duplicated vertices and "dangling" lines.
#'
#' @param x A `GRaster`. If more than one layer is in the `GRaster`, only the first will be used (with a warning).
#'
#' @returns A `GVector`.
#'
#' @seealso [as.points()], [as.polygons()], [terra::as.lines()], [thinLines()], [geometry cleaning][breakPolys], and **GRASS** module `r.to.vect`
#'
#' @example man/examples/ex_asLines.r
#'
#' @aliases as.lines
#' @rdname as.lines
#' @exportMethod as.lines
methods::setMethod(
f = "as.lines",
signature = c(x = "GRaster"),
function(x) {
if (nlyr(x) > 1L) warning("The raster has >1 layer. Only the first will be used.")
x <- x[[1L]]
.locationRestore(x)
.region(x)
src <- .makeSourceName("asLines", "raster")
args <- list(
cmd = "r.to.vect",
input = sources(x),
output = src,
type = "line",
flags = c(.quiet(), "overwrite"),
intern = TRUE
)
do.call(rgrass::execGRASS, args = args)
.makeGVector(src)
} # EOF
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.