View source: R/ExtractAlongTransect.R
ExtractAlongTransect | R Documentation |
Extract values from raster layer(s) along a user defined transect line.
ExtractAlongTransect(transect, r)
transect |
'SpatialPoints' or 'SpatialLines'. Transect line or its vertices. |
r |
'RasterLayer', 'RasterStack', or 'RasterBrick'. Raster layer(s) |
The transect line is described using a simple polygonal chain. The transect line and raster layer(s) must be specified in a coordinate reference system.
A 'list' with components of class 'SpatialPointsDataFrame'. These components represent continuous piecewise line segments along the transect. The following variables are specified for each coordinate point in the line segment:
distance along the transect line.
extracted value for each raster layer in r
, where column names match their respective raster layer name.
J.C. Fisher, U.S. Geological Survey, Idaho Water Science Center
PlotCrossSection
coords <- rbind(c(-100, -90), c(80, 90), c(80, 0), c(40, -40)) crs <- sp::CRS("+init=epsg:4326") transect <- sp::SpatialPoints(coords, proj4string = crs) r <- raster::raster(nrows = 10, ncols = 10, ymn = -80, ymx = 80, crs = crs) names(r) <- "value" set.seed(0) r[] <- runif(raster::ncell(r)) r[4, 6] <- NA PlotMap(r) l <- sp::Lines(list(sp::Line(coords)), ID = "Transect") lines(sp::SpatialLines(list(l), proj4string = crs)) points(transect, pch = 19) segs <- ExtractAlongTransect(transect, r) for (i in seq_along(segs)) points(segs[[i]]) dev.new() xlab <- "Distance along transect" ylab <- "Raster value" xlim <- range(vapply(segs, function(i) { range(i@data[, "dist"]) }, c(0, 0))) ylim <- range(vapply(segs, function(i) { range(i@data[, "value"], na.rm = TRUE) }, c(0, 0))) PlotGraph(NA, xlab = xlab, ylab = ylab, xlim = xlim, ylim = ylim, type = "n") cols <- GetColors(length(segs), scheme = "bright") for (i in seq_along(segs)) lines(segs[[i]]@data[, c("dist", "value")], col = cols[i], lwd = 2) coords <- sp::coordinates(transect) n <- length(transect) d <- cumsum(c(0, as.matrix(dist((coords)))[cbind(1:(n - 1), 2:n)])) abline(v = d, lty = 2) mtext(sprintf("(%d, %d)", coords[1, 1], coords[1, 2]), line = -1, adj = 0, cex = 0.7) mtext(sprintf("(%d, %d)", coords[n, 1], coords[n, 2]), line = -1, adj = 1, cex = 0.7) graphics.off()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.