Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
GDAL-RASTER-CALC(1)		      GDAL		     GDAL-RASTER-CALC(1)

NAME
     gdal-raster-calc - Perform pixel-wise calculations on a raster

     Added in version 3.11.

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 con-
     ventional 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 for-
     mulas.)

     Starting with GDAL 3.12, it is also possible to use a VRT C++  pixel  func-
     tion (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 reso-
     lution. 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  li-
	    brary.   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 mul-
	    tiple 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 inputs A and  B  each  have
	    three bands, and input C has 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, and max) invoked on multiple bands will be
	    applied to all bands in aggregate. In this case, sum(A) is	expanded
	    into  sum(A[1], A[2], A[3]), and sum(A,C) is expanded into sum(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  expression  A	/  sum(A),  which would produce an N-band raster
	    where each output band contains the input band's fraction of the to-
	    tal.

	    Multiple calculations may be specified; output band(s) will be  pro-
	    duced for each expression in the order they are provided.

	    Input rasters will be converted to 64-bit floating point numbers be-
	    fore 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  --dialect  to
	    builtin.  Arguments to functions are passed within parentheses, like
	    sum(k=1),	   min(propagateNoData=true)	 or	interpolate_lin-
	    ear(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 CRS

	    * NODATA: The output NoData value, if any.

	    These variables are useful for calculations that depend  on  spatial
	    position, such as latitude-based corrections, solar angle approxima-
	    tions, 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 is muparser.

     --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 the min, max, sum and avg muparser 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 mean will 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 dimen-
	    sions. 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 consis-
	    tency. All inputs will be assumed to have the spatial reference sys-
	    tem  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 --nodata is 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
     --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 sim-
	    ple formats have no creation options at all. A list of options  sup-
	    ported  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  for-
	    mat  specific documentation for legal creation options for each for-
	    mat.

     --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 sev-
	    eral 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.   Other-
	    wise,  by default, gdal errors out if the target file or dataset al-
	    ready 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 suc-
     cessful 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

AUTHOR
     Dan Baston <dbaston@gmail.com>

COPYRIGHT
     1998-2026

				  Jun 05, 2026		     GDAL-RASTER-CALC(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=gdal-raster-calc&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help