Learn R Programming

terra (version 0.8-5)

extract: Extract values from a SpatRaster

Description

Extract values from a SpatRaster for a set of locations. The locations can be a SpatVector (points, lines, polygons), a matrix with (x, y) or (longitude, latitude -- in that order!) coordinates, or a vector with cell numbers.

Usage

# S4 method for SpatRaster,SpatVector
extract(x, y, fun=NULL, ..., touches=is.lines(y), method="simple", list=FALSE)

# S4 method for SpatRaster,matrix extract(x, y, ...)

# S4 method for SpatRaster,numeric extract(x, y, ...)

Arguments

x

SpatRaster

y

SpatVector (for points, lines, polygons), or for points, 2-column matrix or data.frame (x, y) or (lon, lat), or a vector with cell numbers

fun

character. function to summarize the data. Currently ignored

...

additional arguments passed to the SpatRaster,SpatVector method if y is a matrix, and passed to `fun` if y is a SpatVector

touches

logical. If TRUE, values for all cells touched by lines or polygons are extracted, not just those on the line render path, or whose center point is within the polygon. Not relevant for points

method

character. method for extracting values with points. The default is "simple", the alternative is "bilinear"

list

logical. If TRUE, the output is simplified

Value

data.frame

See Also

values

Examples

Run this code
# NOT RUN {
r <- rast(ncol=5, nrow=5, xmin=0, xmax=5, ymin=0, ymax=5)
values(r) <- 1:25
xy <- rbind(c(0.5,0.5), c(2.5,2.5))
p <- vect(xy, crs="+proj=longlat +datum=WGS84")

extract(r, xy)
extract(r, p)

r[1,]
r[5]
r[,5]

r[c(0:2, 99:101)]

f <- system.file("ex/test.tif", package="terra")
r <- rast(f)

xy <- cbind(179000, 330000)
xy <- rbind(xy-100, xy, xy+1000)
extract(r, xy)

p <- vect(xy)
g <- geom(p)
g

extract(r, p)

x <- r + 10
extract(x, p)

i <- cellFromXY(r, xy)
x[i]
r[i]

y <- c(x,x*2,x*3)
y[i]

## extract with a polygon
#f <- system.file("ex/lux.shp", package="terra")
#v <- vect(f)
#z <- rast(v)
#v <- v[1:2,]
#values(z) <- 1:100
#e <- extract(z, v)
#e
#tapply(e[,2], e[,1], mean)

#ee <- extract(z, v, list=TRUE)
#rapply(ee, mean)

#x <- c(z, z*2, z/3)
#names(x) <- letters[1:3]

#e <- extract(x, v)
#de <- data.frame(e)
#aggregate(de[,2:4], de[,1,drop=FALSE], mean)

#ee <- extract(x, v, list=TRUE)
#matrix(rapply(ee, mean), ncol=nlyr(x), byrow=TRUE)
# }

Run the code above in your browser using DataLab