gdal raster calc
Added in version 3.11.
Perform raster algebra
Synopsis
Usage: gdal raster calc [OPTIONS] <INPUTS>... <OUTPUT>
Perform raster algebra
Positional arguments:
-i, --input <INPUTS> Input raster datasets [1.. values] [required] [not available in pipelines]
-o, --output <OUTPUT> Output raster dataset [required] [not available in pipelines]
Common Options:
-h, --help Display help message and exit
--json-usage Display usage as JSON document and exit
--config <KEY>=<VALUE> Configuration option [may be repeated]
-q, --quiet Quiet mode (no progress bar or warning message) [not available in pipelines]
Options:
-f, --of, --format, --output-format <OUTPUT-FORMAT> Output format ("GDALG" allowed) [not available in pipelines]
--co, --creation-option <KEY>=<VALUE> Creation option [may be repeated] [not available in pipelines]
--overwrite Whether overwriting existing output dataset is allowed [not available in pipelines]
Mutually exclusive with --append
--append Append as a subdataset to existing output [not available in pipelines]
Mutually exclusive with --overwrite
--ot, --datatype, --output-data-type <OUTPUT-DATA-TYPE> Output data type. OUTPUT-DATA-TYPE=UInt8|Int8|UInt16|Int16|UInt32|Int32|UInt64|Int64|CInt16|CInt32|Float16|Float32|Float64|CFloat32|CFloat64
--no-check-crs Do not check consistency of input coordinate reference systems
--no-check-extent Do not check consistency of input extents
--propagate-nodata Whether to set pixels to the output NoData value if any of the input pixels is NoData
--calc <CALC> Expression(s) to evaluate [1.. values] [required]
--dialect <DIALECT> Expression dialect. DIALECT=muparser|builtin (default: muparser)
--flatten Generate a single band output raster per expression, even if input datasets are multiband
--nodata <NODATA> Assign a specified nodata value to output bands ('none', numeric value, 'nan', 'inf', '-inf')
Advanced Options:
--if, --input-format <INPUT-FORMAT> Input formats [may be repeated] [not available in pipelines]
--oo, --open-option <KEY>=<VALUE> Open options [may be repeated] [not available in pipelines]
Description
gdal raster calc performs pixel-wise calculations on one or more input GDAL datasets. Calculations can be performed eagerly, writing results to a conventional raster format, or lazily, written as a set of derived bands in a VRT (Virtual Dataset).
The list of input GDAL datasets can be specified at the end
of the command line or put in a text file (one input per line) for very long lists.
If more than one input dataset is used, it should be prefixed with a name by which it
will be referenced in the calculation, e.g. A=my_data.tif. (If a single dataset is
used, it will be referred to with the variable X in formulas.)
Starting with GDAL 3.12, it is also possible to use a VRT C++ pixel function
(such a sum, mean, min, max) by specifying --dialect to
builtin.
The inputs should have the same spatial reference system and should cover the same spatial extent but are not required to have the same
spatial resolution. The spatial extent check can be disabled with --no-check-extent,
in which case the inputs must have the same dimensions. The spatial reference system check can be
disabled with --no-check-crs.
Since GDAL 3.12, this algorithm can be part of a gdal pipeline or gdal raster pipeline.
GDALG output (on-the-fly / streamed dataset)
This program supports serializing the command line as a JSON file using the GDALG output format.
The resulting file can then be opened as a raster dataset using the
GDALG: GDAL Streamed Algorithm driver, and apply the specified pipeline in a on-the-fly /
streamed way.
Program-Specific Options
- --calc
An expression to be evaluated using the muparser math parser library. The expression may refer to individual bands of each input (e.g.,
X[1] + 3) or it may be applied to all bands of an input (X + 3).There are two methods by which an expression may be applied to multiple bands. In the default method, the expression is applied to each band individually, resulting in one output band for each input band. For example, with a three-band input
X, the expression--calc "X+3"would be expanded into--calc "X[1]+3" --calc "X[2]+3" --calc "X[3]+3". If the expression contains a reference to all bands of multiple inputs, those inputs must either have the same number of bands, or a single band. For example, if inputsAandBeach have three bands, and inputChas a single band, then the argument--calc "A + B + C"is equivalent to--calc "A[1] + B[1] + C[1]" --calc "A[2] + B[2] + C[1]" --calc "A[3] + B[3] + C[1]". Similarly,--calc "sum(A,B,C)"would be expanded to--calc "sum(A[1], B[1], C[1]" --calc "sum(A[2], B[2], C[1])" --calc "sum(A[3], B[3], C[1])".In the second method, which is enabled with
--flatten, aggregate functions (sum,avg,min, andmax) invoked on multiple bands will be applied to all bands in aggregate. In this case,sum(A)is expanded intosum(A[1], A[2], A[3]), andsum(A,C)is expanded intosum(A[1], A[2], A[3], C[1]). If the expression consists _only_ of aggregate functions, this will produce a single output band no matter how many input bands are present. However, if the expression contains a non-aggregate reference to all bands of an input, then one output band will still be produced for each input band. A simple example is the expressionA / sum(A), which would produce an N-band raster where each output band contains the input band's fraction of the total.Multiple calculations may be specified; output band(s) will be produced for each expression in the order they are provided.
Input rasters will be converted to 64-bit floating point numbers before performing calculations.
Starting with GDAL 3.12, it is also possible to use a VRT C++ pixel function (such a
sum,mean,min,max) by specifying--dialecttobuiltin. Arguments to functions are passed within parentheses, likesum(k=1),min(propagateNoData=true)orinterpolate_linear(t0=1,dt=1,t=10).Built-in variables
The following built-in variables are available in expressions:
_CENTER_X_: X coordinate of the pixel center, expressed in the dataset CRS_CENTER_Y_: Y coordinate of the pixel center, expressed in the dataset CRSNODATA: The output NoData value, if any.
These variables are useful for calculations that depend on spatial position, such as latitude-based corrections, solar angle approximations, or zonal masks.
See Example 7 for a usage example.
Note: To work with longitude/latitude values, the input dataset must be in a geographic coordinate reference system (for example, EPSG:4326).
- --dialect muparser|builtin
Added in version 3.12.
Specify the expression engine used to interpret the value of
--calc. The default ismuparser.
- --flatten
Added in version 3.12.
Generate a single band output raster per expression, even if input datasets are multiband.
For the default muparser dialect, using the name of an input raster (let's say A) is equivalent to
A[1],A[2],...,A[n]. Such syntax works with themin,max,sumandavgmuparser functions.For example, let's consider 2 rasters A and B with 3bands each, then
--flatten --calc "avg(A)-avg(B)"is equivalent to--calc "avg(A[1],A[2],A[3])-avg(B[1],B[2],B[3])"And
--flatten --dialect=builtin --calc meanwill compute a single band with the average of all 4 input bands.
- -i [<name>=]<input>
Select an input dataset to be processed. If more than one input dataset is provided, each dataset must be prefixed with a name to which it will will be referenced in
--calc.
- --no-check-extent
Do not verify that the input rasters have the same spatial extent. The input rasters will instead be required to have the same dimensions. The geotransform of the first input will be assigned to the output.
- --no-check-crs
Do not check the spatial reference systems of the inputs for consistency. All inputs will be assumed to have the spatial reference system of the first input, and this spatial reference system will be used for the output.
- --nodata
Added in version 3.12.
Set the NoData value for the output dataset. May be set to "none" to leave the NoData value undefined. If
--nodatais not specified, gdal raster calc will use a NoData value from the first source dataset to have one.
- --propagate-nodata
Added in version 3.12.
If set, a NoData value in any input dataset used an in expression will cause the output value to be NoData.
Standard Options
Details
- --append
Append input raster as a new subdataset to an existing output file. Only works with drivers that support adding subdatasets such as GTiff -- GeoTIFF File Format and GPKG -- GeoPackage raster This also creates the output dataset if it does not exist yet.
- --co, --creation-option <NAME>=<VALUE>
Many formats have one or more optional creation options that can be used to control particulars about the file created. For instance, the GeoTIFF driver supports creation options to control compression, and whether the file should be tiled.
May be repeated.
The creation options available vary by format driver, and some simple formats have no creation options at all. A list of options supported for a format can be listed with the --formats command line option but the documentation for the format is the definitive source of information on driver creation options. See Raster drivers format specific documentation for legal creation options for each format.
- --if, --input-format <format>
Format/driver name to be attempted to open the input file(s). It is generally not necessary to specify it, but it can be used to skip automatic driver detection, when it fails to select the appropriate driver. This option can be repeated several times to specify several candidate drivers. Note that it does not force those drivers to open the dataset. In particular, some drivers have requirements on file extensions.
May be repeated.
- --oo, --open-option <NAME>=<VALUE>
Dataset open option (format specific).
May be repeated.
- -f, --of, --format, --output-format <OUTPUT-FORMAT>
Which output raster format to use. Allowed values may be given by
gdal --formats | grep raster | grep rw | sort
- --ot, --datatype, --output-data-type <OUTPUT-DATA-TYPE>
Output data type among
Byte,Int8,UInt16,Int16,UInt32,Int32,UInt64,Int64,CInt16,CInt32,Float32,Float64,CFloat32,CFloat64.
- --overwrite
Allow program to overwrite existing target file or dataset. Otherwise, by default, gdal errors out if the target file or dataset already exists.
Return status code
The program returns status code 0 in case of success, and non-zero in case of error (non-blocking errors emitted as warnings are considered as a successful execution).
Examples
Example 1: Per-band sum of three files
gdal raster calc -i "A=file1.tif" -i "B=file2.tif" -i "C=file3.tif" --calc "A+B+C" -o out.tif
Example 2: Per-dataset average of all bands of each dataset
gdal raster calc -i "A=file1.tif" -i "B=file2.tif" -i "C=file3.tif" --flatten --calc "avg(A)" --calc "avg(B)" --calc "avg(C)" -o out.tif
Example 3: Per-band maximum of three files
gdal raster calc -i "A=file1.tif" -i "B=file2.tif" -i "C=file3.tif" --calc "max(A,B,C)" -o out.tif
Example 4: Setting values of zero and below to NaN
gdal raster calc -i "A=input.tif" -o result.tif --calc="A > 0 ? A : NaN"
Example 5: Compute the average (as a single band) of all bands of two input datasets
gdal raster calc -i A=input1.tif -i B=input2.tif -o result.tif --flatten --calc=mean --dialect=builtin
Example 6: Generate a masked aspect layer where the slope angle is greater than 2 degrees, using nested pipelines (since GDAL 3.12.1)
gdal raster calc -i "SLOPE=[ read dem.tif ! slope ]" -i "ASPECT=[ read dem.tif ! aspect ]" -o result.tif --calc "(SLOPE >= 2) ? ASPECT : -9999" --nodata -9999
Example 7: Latitude-based calculation using _CENTER_Y_
gdal raster calc -i A=input.tif \
--calc="sin(_CENTER_Y_ * 0.0174533)" \
-o output.tif