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.