Scroll to navigation



gdal_calc - Command line raster calculator with numpy syntax.

SYNOPSIS --calc=expression --outfile=out_filename [-A filename]

[--A_band=n] [-B...-Z filename] [other_options]


Command line raster calculator with numpy syntax. Use any basic arithmetic supported by numpy arrays such as +, -, *, and \ along with logical operators such as >. Note that all files must have the same dimensions, but no projection checking is performed.

Show this help message and exit

The same as --help.

Calculation in gdalnumeric syntax using +, -, /, *, or any numpy array functions (i.e. log10()). Multiple --calc options can be listed to produce a multiband file (GDAL >= 3.2).

Input gdal raster file, you can use any letter (A-Z).

Number of raster band for file A (default 1).

Output file to generate or fill.

Output nodata value (default datatype specific value).

Output datatype, must be one of [Int32, Int16, Float64, UInt16, Byte, UInt32, Float32].


Despite the datatype set using --type, when doing intermediate aritmethic operations using operands of the same type, the operation result will honor the original datatype. This may lead into unexpected results in the final result.

GDAL format for output file.

Passes a creation option to the output format driver. Multiple options may be listed. See format specific documentation for legal creation options for each format.

The same as creation-option.

Process all bands of given raster (A-Z). Requires a single calc for all bands.

Overwrite output file if it already exists.

Print debugging information.

Suppress progress messages.


Add two files together: -A input1.tif -B input2.tif --outfile=result.tif --calc="A+B"

Average of two layers: -A input.tif -B input2.tif --outfile=result.tif --calc="(A+B)/2"


In the previous example, beware that if A and B inputs are of the same datatype, for example integers, you may need to force the conversion of one of the operands before the division operation. -A input.tif -B input2.tif --outfile=result.tif --calc="(A.astype(numpy.float64) + B) / 2"

Set values of zero and below to null: -A input.tif --outfile=result.tif --calc="A*(A>0)" --NoDataValue=0

Using logical operator to keep a range of values from input: -A input.tif --outfile=result.tif --calc="A*logical_and(A>100,A<150)"

Work with multiple bands: -A input.tif --A_band=1 -B input.tif --B_band=2 --outfile=result.tif --calc="(A+B)/2" --calc="B*logical_and(A>100,A<150)"


Chris Yesson <chris dot yesson at ioz dot ac dot uk>, Etienne Tourigny <etourigny dot dev at gmail dot com>



March 5, 2021