Learn R Programming

terra (version 0.8-6)

terra-package: The terra package

Description

The 'terra' package implements two main classes for spatial data handling: SpatRaster and SpatVector. SpatRaster supports handling large raster files that cannot be loaded into memory; local, focal, zonal, and global raster operations; polygon, line and point to raster conversion; integration with modeling methods to make spatial predictions; and more.

'terra' provides methods to manipulate geographic (spatial) data in "raster" and "vector" data types. Raster data divides space into rectangular cells (pixels). Such data are also referred to as "grid" data are often used to represent spatially continuous phenomena, such as elevation or the weather. Satellite images also have this format. Raster data can be contrasted with discrete "vector" spatial data such as points, lines, polygons.

The 'terra' package is conceived as a replacement of the 'raster' package. 'terra' has a very similar, but simpler, interface, and it is faster than 'raster'. A major simplification is that 'terra' has a single class "SpatRaster" for which 'raster' has three (RasterLayer, RasterStack, RasterBrick). Likewise there is a single class for vector data ("SpatVector"). Like "raster" this package should be particularly useful when using very large datasets that can not be loaded into the computer's memory. Functions will work correctly, because they they process large files in chunks, i.e., they read, compute, and write blocks of data, without loading all values into memory at once.

Furthermore, 'terra' has a "SpatDataSet" class that represents a collection of sub-datasets for the same area. Each subdataset is a SpatRaster with possibly many layers, and may, for example, represent different weather variables.

Note the following important differences in methods names with the 'raster' package

raster package terra package
raster, brick, stack rast
rasterFromXYZ rast( , type="xyz")
stack (for combining Raster* objects) c
extent ext
calc app
overlay lapp
stackApply tapp
extend expand
nlayers nlyr
stackSelect selectRange
reclassify, subs, cut classify
cellStats global
projectRaster project
dropLayer subset
isLonLat, isGlobalLonLat, couldBeLonLat isLonLat
shapefile vect
gridDistance, distanceFromPoints distance
drawExtent, drawPoly, drawLine draw
compareRaster compareGeom
sampleRandom, sampleRegular spatSample
rasterToPoints as.points
rasterToPolygons as.polygons
cellFromLine, cellFromPolygon, cellsFromExtent cells
clump patches

Also note that even if function names are the same in terra and raster, their output can be different. In most cases to get more consistency in the returned values (and thus fewer errors in the downstream code that uses them). It other cases it simply seemed better. Here are some examples:

area By default, terra returns the summed area of the raster cells that are not NA. raster returns a RasterLayer. Use sum=FALSE in terra for that behavior
-
as.polygons By default, terra returns dissolved polygons
-
extract By default, terra returns a matrix, with the first column the sequential ID of the vectors. raster returns a list (for lines or polygons) or a matrix (for points, but without the ID column. You can use list=TRUE to get the results as a list
-
values terra always returns a matrix. raster returns a vector for a RasterLayer
-
Summary-methods With raster, mean(x, y) and mean(stack(x, y) return the same result, a single layer with the mean of all cell values. That is what terra returns with mean(c(x, y)), but with mean(x, y) the parallel mean is returned -- that is, the computation is done layer-wise, and the number of layers in the output is the same as that of x and y (or the larger of the two if they are not the same). This affects all summary functions (sum, mean, median, which.min, which.max, min, max, prod, any, all, stdev), except range, which is not implemented for this case (you can use min and max instead)

Below is a list of some of the most important methods grouped by theme. Some of these may not have been implemented yet.

Arguments

I. Creating SpatRaster objects

rast Create a SpatRaster from scratch, file, or another object
--------------------------- ------------------------------------------------------------------------------------------

II. Combining and subsetting SpatRaster objects

c Combine SpatRasters (multiple layers) (like raster::stack)
subset or [[, or $ Select layers of a SpatRaster
selectRange Select cell values from different layers using an index layer
--------------------------- ------------------------------------------------------------------------------------------

III. Changing the spatial extent and/or resolution of a SpatRaster

Also see the methods in section XI

merge Combine SpatRasters with different extents (but same origin and resolution)
mosaic Combine SpatRasters with different extents and a function for the values in overlapping areas
crop Select a geographic subset of a SpatRaster
expand Enlarge a SpatRaster
trim Trim a SpatRaster by removing exterior rows and/or columns that only have NAs
aggregate Combine cells of a SpatRaster to create larger cells
disaggregate Subdivide cells
resample Resample (warp) values to a SpatRaster with a different origin and/or resolution
project Project (warp) values to a SpatRaster with a different coordinate reference system
shift Adjust the location of SpatRaster
flip Flip values horizontally or vertically
rotate Rotate values around the date-line (for lon/lat data)
t Transpose a SpatRaster
--------------------------- ------------------------------------------------------------------------------------------

IV. Local (cell based) computation

Arith-methods Arith functions (+, -, *, ^, %%, %/%, /)
Math-methods Math functions like abs, sqrt, trunc, log, log10, exp, sin, round
Logic-methods Logic functions (!, &, |)
Summary-methods Summary functions (mean, max, min, median, sum, range, prod, any, all, stdev, which.min, which.max)
Compare-methods Compare functions (==, !=, >, <, <=, >=)
app Apply a function to cells of all layers(as in base::apply)
tapp Apply a function to groups of layers (as in base::tapply)
lapp Apply a function using the layers as variables
rapp Apply a function to a spatially variable range of layers
cover First layer covers second layer except where the first layer is NA
mask Use values from first SpatRaster except where cells of the mask SpatRaster are NA (or another value of choice)
classify (Re-)classify values
init Initialize cells with new values
area Compute the area of cells
--------------------------- ------------------------------------------------------------------------------------------

V. Zonal and global computation

zonal Summarize a SpatRaster by zones in another SpatRaster
global Summarize SpatRaster cell values with a function
unique Get the unique values in a SpatRaster
freq Frequency table of SpatRaster cell values
crosstab Cross-tabulate two SpatRasters
quantile Quantiles
summary Summary of the values of a SpatRaster (quartiles and mean)
area Compute the total area covered by cells
stretch Stretch values
--------------------------- ------------------------------------------------------------------------------------------

VI. Focal and other spatial contextual computation

focal Focal (neighborhood; moving window) functions
adjacent Identify cells that are adjacent to a set of cells of a SpatRaster
boundaries Detection of boundaries (edges)
distance Shortest distance to a cell that is not NA or to or from a vector object
direction Direction (azimuth) to or from cells that are not NA
localFun Local association (using neighborhoods) functions
patches Find patches
terrain Compute slope, aspect and other terrain characteristics from elevation data
autocor Compute global or local Moran or Geary indices of spatial autocorrelation
--------------------------- ------------------------------------------------------------------------------------------

VII. Model predictions

predict Predict a non-spatial model to a SpatRaster
interpolate Predict a spatial model to a SpatRaster
--------------------------- ------------------------------------------------------------------------------------------

VIII. Data type conversion

You can coerce SpatRasters to Raster* objects after loading the raster package with as(object, "Raster"), or raster(object) or brick(object) or stack(object)

rast SpatRaster from matrix and other objects
rasterize Rasterizing points, lines or polygons
as.points Create points from a SpatRaster or SpatVector
as.lines Create points from a SpatRaster or SpatVector
as.polygons Create polygons from a SpatRaster
as.contour Contour lines from a SpatRaster
--------------------------- ------------------------------------------------------------------------------------------

IX. Accessing cell values

Apart from the function listed below, you can also use indexing with [ with cell numbers, and row and/or column numbers

values Get or set all cell values (fails with very large rasters)
setValues Set new values to the cells of a SpatRaster
as.matrix Get cell values as a matrix
as.array Get cell values as an array
extract Extract cell values from a SpatRaster (e.g., by cell, coordinates, polygon)
spatSample Regular or random sample
minmax Get the minimum and maximum value of the cells of a SpatRaster (if known)
setMinMax Compute the minimum and maximum value of a SpatRaster if these are not known
--------------------------- ------------------------------------------------------------------------------------------

X. Plotting

Maps
plot Plot a SpatRaster or SpatVector. The main method to create a map
plotRGB Combine three layers (red, green, blue channels) into a single "real color" image
image Alternative way to plot a SpatRaster
persp Perspective plot of a SpatRaster
contour Contour plot or filled-contour plot of a SpatRaster
text Plot the values of a SpatRaster or SpatVector on top of a map
. Interacting with a map
zoom
Zoom in to a part of a map click
Query values of SpatRaster or SpatVector by clicking on a map select
Select a spatial subset of a SpatRaster or SpatVector draw
Create a SpatExtent or SpatVector by drawing on a map .

Other plots

plot x-y scatter plot of the values of two SpatRaster objects
hist Histogram of SpatRaster values
barplot Barplot of a SpatRaster
density Density plot of SpatRaster values
pairs Pairs plot for layers in a SpatRaster
boxplot Box plot of the values of a SpatRaster
--------------------------- ------------------------------------------------------------------------------------------

XI. Getting and setting SpatRaster dimensions

Get or set basic parameters of SpatRasters. If there are values associated with a SpatRaster object (either in memory or via a link to a file) these are lost when you change the number of columns or rows or the resolution. This is not the case when the extent is changed (as the number of columns and rows will not be affected). Similarly, with crs you can set the coordinate reference system, but this does not transform the data (see project for that).

ncol The number of columns
nrow The number of rows
ncell The number of cells (can not be set directly, only via ncol or nrow)
res The resolution (x and y)
nlyr Get or set the number of layers
names Get or set the layer names
xres The x resolution (can be set with res)
yres The y resolution (can be set with res)
xmin The minimum x coordinate (or longitude)
xmax The maximum x coordinate (or longitude)
ymin The minimum y coordinate (or latitude)
ymax The maximum y coordinate (or latitude)
ext Get or set the extent (minimum and maximum x and y coordinates (a.k.a. "bounding box")
origin The origin of a SpatRaster
crs The coordinate reference system (map projection)
isLonLat Test if an object has (or may have) a longitude/latitude coordinate reference system; and if it has global coverage
filename Filename(s) to which a SpatRaster is linked
compareGeom Compare the geometry of SpatRasters
NAvalue Get or set the NA value (for reading from a file)
--------------------------- ------------------------------------------------------------------------------------------

XII. Computing row, column, cell numbers and coordinates

Cell numbers start at 1 in the upper-left corner. They increase within rows, from left to right, and then row by row from top to bottom. Likewise, row numbers start at 1 at the top of the raster, and column numbers start at 1 at the left side of the raster.

xFromCol x-coordinates from column numbers
yFromRow y-coordinates from row numbers
xFromCell x-coordinates from row numbers
yFromCell y-coordinates from cell numbers
xyFromCell x and y coordinates from cell numbers
colFromX Column numbers from x-coordinates (or longitude)
rowFromY Row numbers from y-coordinates (or latitude)
rowColFromCell Row and column numbers from cell numbers
cellFromXY Cell numbers from x and y coordinates
cellFromRowCol Cell numbers from row and column numbers
cellFromRowColCombine Cell numbers from all combinations of row and column numbers
cells Cell numbers from an SpatVector or SpatExtent
--------------------------- ------------------------------------------------------------------------------------------

XIII. Writing files

Basic writeRaster
Write all values of SpatRaster to disk .
Advanced blockSize
Get suggested block size for reading and writing writeStart
Open a file for writing writeValues
Write some values writeStop
Close the file after writing ---------------------------
------------------------------------------------------------------------------------------ Basic

XIV. SpatDataSet objects

A SpatDataSet contains SpatRaster objects that are sub-datasets for the same area. They all have the same extent and resolution.

sds Create a SpatDataSet
[ or $ Extract a SpatRaster
names Get the names of the sub-datasets
--------------------------- ------------------------------------------------------------------------------------------

XV. Manipulation of SpatVector objects

The name in bold is the equivalent command in ArcGIS.

c append vector data of the same (vector) type ("rbind")
erase or "-" erase parts of a polygons
intersect or "*" intersect polygons
union or "+" union polygons
cover update and identity a polygons
symdif symmetrical difference of two polygons
aggregate dissolve smaller polygons into larger ones
disaggregate explode: turn polygon parts into separate polygons
crop clip vector data using a rectangle (SpatExtent )
select select - interactively select spatial features
click identify attributes by clicking on a map
merge Join table
fill remove holes from polygons
extract spatial queries between SpatVector and SpatRaster objects
as.data.frame get attributes as a data.frame
--------------------------- ------------------------------------------------------------------------------------------

XVI. SpatExtent objects

extent Create a SpatExtent object
intersect Intersect two SpatExtent objects
union Combine two SpatExtent objects
Math-methods round/floor/ceiling of the coordinates of a SpatExtent
align Align a SpatExtent with a SpatRaster
draw Create a SpatExtent object by drawing it on top of a map (plot)
--------------------------- ------------------------------------------------------------------------------------------

XVII. Miscellaneous

terraOptions Show, set, save or get session options
sources Show the data sources of a SpatRaster
tmpFiles Show or remove temporary files
canProcessInMemory Test whether a file can be created in memory
readStart Open file connections for efficient multi-chunck reading
readStop Close file connections
inMemory Are the cell values in memory?
fromDisk Are the cell values read from a file?
--------------------------- ------------------------------------------------------------------------------------------

Acknowledgments

This package is an attempt to stand on the shoulders of giants (GDAL, PROJ, GEOS, GeographicLib, Rcpp, R)