GDAL-RASTER-ZONAL-STATS(1) GDAL GDAL-RASTER-ZONAL-STATS(1)
gdal-raster-zonal-stats - Compute raster zonal statistics.
Added in version 3.12.
Usage: gdal raster zonal-stats [OPTIONS] <INPUT> <OUTPUT>
Calculate raster zonal statistics
Positional arguments:
-i, --input <INPUT> Input raster datasets [required]
-o, --output <OUTPUT> Output vector dataset [required]
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)
Options:
-f, --of, --format, --output-format <OUTPUT-FORMAT> Output format ("GDALG" allowed)
--co, --creation-option <KEY>=<VALUE> Creation option [may be repeated]
--lco, --layer-creation-option <KEY>=<VALUE> Layer creation option [may be repeated]
--overwrite Whether overwriting existing output is allowed
--update Whether to open existing dataset in update mode
--overwrite-layer Whether overwriting existing output is allowed
--append Whether appending to existing layer is allowed
Mutually exclusive with --upsert
--output-layer <OUTPUT-LAYER> Output layer name
--skip-errors Skip errors when writing features
-b, --band <BAND> Input band(s) (1-based index) [may be repeated]
--zones <ZONES> Dataset containing zone definitions [required]
--zones-band <ZONES-BAND> Band from which zones should be read
Mutually exclusive with --zones-layer
--zones-layer <ZONES-LAYER> Layer from which zones should be read
Mutually exclusive with --zones-band
--weights <WEIGHTS> Weighting raster dataset
--weights-band <WEIGHTS-BAND> Band from which weights should be read (default: 1)
--pixels <PIXELS> Method to determine which pixels are included in stat calculation.. PIXELS=default|fractional|all-touched
--stat <STAT> Statistic(s) to compute for each zone. STAT=center_x|center_y|count|coverage|frac|max|max_center_x|max_center_y|mean|median|min|minority|min_center_x|min_center_y|mode|stdev|sum|unique|values|variance|variety|weighted_mean|weighted_stdev|weighted_sum|weighted_variance|weights [may be repeated] [required]
--include-field <INCLUDE-FIELD> Fields from polygon zones to include in output [may be repeated]
--strategy <STRATEGY> For polygon zones, whether to iterate over input features or raster chunks. STRATEGY=feature|raster (default: feature)
--chunk-size <CHUNK-SIZE> Maximum size of raster chunks read into memory (default: 5%)
Advanced Options:
--if, --input-format <INPUT-FORMAT> Input formats [may be repeated]
--oo, --open-option <KEY>=<VALUE> Open options [may be repeated]
--output-oo, --output-open-option <KEY>=<VALUE> Output open options [may be repeated]
--upsert Upsert features (implies 'append')
Mutually exclusive with --append
gdal raster zonal-stats computes raster zonal statistics -- a summary
of pixel values within zones specified either polygon features or a
categorical raster.
[image] Mean elevation calculated for each polygon from an
elevation raster..UNINDENT
A weighting raster may be provided in addition to the source
raster, allowing calculation of statistics such as
population-weighted mean weather conditions.
All inputs should be provided in the same spatial reference system.
If input rasters use different resolutions they will be resampled
to a consistent resolution using average resampling. However, no
reprojection is performed.
When zones are defined using polygons, three methods are available
for determining which pixels to include in the calculation. By
default, the geometries are rasterized using default parameters, and
pixels included in the rasterization are used in the calculation with
equal weighting. By using --pixels all-touched, all pixels touched
by the polygon are used in the calculation, again with equal
weighting. If using --pixels fractional, the fraction of each pixel
that is covered by the polygon is computed, and pixels are weighted
according to this fraction. This option requires GDAL be built
against version 3.14 or later of the GEOS library.
+------------------+---------------------------+
|Name | Description |
+------------------+---------------------------+
|center_x | Array with cell center |
| | x-coordinate for each |
| | cell that intersects the |
| | polygon. Each cell center |
| | may or may not be inside |
| | the polygon. |
+------------------+---------------------------+
|center_y | Array with cell center |
| | y-coordinate for each |
| | cell that intersects the |
| | polygon. Each cell center |
| | may or may not be inside |
| | the polygon. |
+------------------+---------------------------+
|count | Sum of all cell coverage |
| | fractions. |
+------------------+---------------------------+
|coverage | Array with coverage |
| | fraction of each cell |
| | that intersects the |
| | polygon |
+------------------+---------------------------+
|frac | Fraction of covered cells |
| | that are occupied by each |
| | distinct raster value, as |
| | provided by unique. |
+------------------+---------------------------+
|majority | The raster value |
| | occupying the greatest |
| | number of cells, taking |
| | into account cell |
| | coverage fractions but |
| | not weighting raster |
| | values. |
+------------------+---------------------------+
|max | Maximum value of cells |
| | that intersect the |
| | polygon, not taking |
| | coverage fractions or |
| | weighting raster values |
| | into account. |
+------------------+---------------------------+
|max_center_x | Cell center x-coordinate |
| | for the cell containing |
| | the maximum value |
| | intersected by the |
| | polygon. The center of |
| | this cell may or may not |
| | be inside the polygon. |
+------------------+---------------------------+
|max_center_y | Cell center y-coordinate |
| | for the cell containing |
| | the maximum value |
| | intersected by the |
| | polygon. The center of |
| | this cell may or may not |
| | be inside the polygon. |
+------------------+---------------------------+
|mean | Mean value of cells that |
| | intersect the polygon, |
| | weighted by the percent |
| | of each cell that is |
| | covered. |
+------------------+---------------------------+
|min | Minimum value of cells |
| | that intersect the |
| | polygon, not taking |
| | coverage fractions or |
| | weighting raster values |
| | into account. |
+------------------+---------------------------+
|min_center_x | Cell center x-coordinate |
| | for the cell containing |
| | the minimum value |
| | intersected by the |
| | polygon. The center of |
| | this cell may or may not |
| | be inside the polygon. |
+------------------+---------------------------+
|min_center_y | Cell center y-coordinate |
| | for the cell containing |
| | the minimum value |
| | intersected by the |
| | polygon. The center of |
| | this cell may or may not |
| | be inside the polygon. |
+------------------+---------------------------+
|minority | The raster value |
| | occupying the least |
| | number of cells, taking |
| | into account cell |
| | coverage fractions but |
| | not weighting raster |
| | values. |
+------------------+---------------------------+
|stdev | Population standard |
| | deviation of cell values |
| | that intersect the |
| | polygon, taking into |
| | account coverage |
| | fraction. |
+------------------+---------------------------+
|sum | Sum of values of raster |
| | cells that intersect the |
| | polygon, with each raster |
| | value weighted by its |
| | coverage fraction. |
+------------------+---------------------------+
|unique | Array of unique raster |
| | values for cells that |
| | intersect the polygon |
+------------------+---------------------------+
|values | Array of raster values |
| | for each cell that |
| | intersects the polygon |
+------------------+---------------------------+
|variance | Population variance of |
| | cell values that |
| | intersect the polygon, |
| | taking into account |
| | coverage fraction. |
+------------------+---------------------------+
|variety | The number of distinct |
| | raster values in cells |
| | wholly or partially |
| | covered by the polygon. |
+------------------+---------------------------+
|weighted_frac | Fraction of covered cells |
| | that are occupied by each |
| | distinct raster value, |
| | weighted by the value of |
| | a second weighting |
| | raster. Order corresponds |
| | to values returned by |
| | unique. |
+------------------+---------------------------+
|weighted_mean | Mean value of cells that |
| | intersect the polygon, |
| | weighted by the product |
| | over the coverage |
| | fraction and the |
| | weighting raster. |
+------------------+---------------------------+
|weighted_stdev | Weighted version of |
| | stdev. |
+------------------+---------------------------+
|weighted_variance | Weighted version of |
| | variance |
+------------------+---------------------------+
|weights | Array of weight values |
| | for each cell that |
| | intersects the polygon |
+------------------+---------------------------+
This algorithm can be part of a gdal pipeline.
The following options are available:
--stat <STAT>
Specifies one or more of the Supported stats to compute for
each zone.
--zones <ZONES>
The path to a dataset that defines the zones. If the dataset
has more than 1 raster band or feature layer, --zones-band or
--zones-layer must be specified.
--zones-band <ZONES-BAND>
Specifies the raster band from which zones can be read.
--zones-layer <ZONES-LAYER>
Specifies the feature layer from which zones can be read.
--weights <WEIGHTS>
Optional path to a dataset to use for weighting.
--weights-band <WEIGHTS-BAND>
Specifies the raster band from which weights can be read.
--pixels <PIXELS>
Method to determine which pixels should be included in the
calculation: default, all-touched, or fractional.
--chunk-size <MEMORY>
Defines the maximum size of raster chunks to read. May be
expressed as either an amount of memory (500 MB, 2 GB, etc.)
or as a percentage of available RAM (e.g. 10%).
--strategy <STRATEGY>
Specifies the the processing strategy (raster or feature),
when vector zones are used. In the default strategy
(--strategy feature), GDAL will iterate over the features in
the zone dataset, read the corresponding pixels from the
raster, and write the statistics for that feature. This avoids
the need to read the entire feature dataset into memory at
once, but may cause the same pixels to be read multiple times
if the polygon features are large or not ordered spatially. If
--strategy raster is used, GDAL will iterate over chunks of
the raster dataset, find corresponding polygon zones, and
update the statistics for those features. (The size of the
raster chunks can be controlled using :option:--chunk-size.)
This ensures that raster pixels are only read once, but may
cause the same features to be processed multiple times.
--include-field <INCLUDE-FIELD>
Specifies one or more fields from the zones to be copied to
the output. Only available when vector zones are used.
Example 1: Summarize mean elevation within 200m of points of interest
gdal pipeline read dem.tif ! \
zonal-stats \
--zones [ read points.geojson ! buffer 200 ] \
--stat mean ! \
write \
--output-format CSV \
--output /vsistdout/
Example 2: Create a layer with the highest points in each watershed
gdal pipeline read dem.tif !
zonal-stats \
--zones watersheds.shp \
--stat max_center_x \
--stat max_center_y !
make-point \
--x max_center_x \
--y max_center_y \
--dst-crs EPSG:4326 !
write out.geojson
Dan Baston <dbaston@gmail.com>
1998-2026
March 20, 2026 GDAL-RASTER-ZONAL-STATS(1)
NAME
gdal-raster-zonal-stats - Compute raster zonal statistics.
Added in version 3.12.
SYNOPSIS
Usage: gdal raster zonal-stats [OPTIONS] <INPUT> <OUTPUT>
Calculate raster zonal statistics
Positional arguments:
-i, --input <INPUT> Input raster datasets [required]
-o, --output <OUTPUT> Output vector dataset [required]
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)
Options:
-f, --of, --format, --output-format <OUTPUT-FORMAT> Output format ("GDALG" allowed)
--co, --creation-option <KEY>=<VALUE> Creation option [may be repeated]
--lco, --layer-creation-option <KEY>=<VALUE> Layer creation option [may be repeated]
--overwrite Whether overwriting existing output is allowed
--update Whether to open existing dataset in update mode
--overwrite-layer Whether overwriting existing output is allowed
--append Whether appending to existing layer is allowed
Mutually exclusive with --upsert
--output-layer <OUTPUT-LAYER> Output layer name
--skip-errors Skip errors when writing features
-b, --band <BAND> Input band(s) (1-based index) [may be repeated]
--zones <ZONES> Dataset containing zone definitions [required]
--zones-band <ZONES-BAND> Band from which zones should be read
Mutually exclusive with --zones-layer
--zones-layer <ZONES-LAYER> Layer from which zones should be read
Mutually exclusive with --zones-band
--weights <WEIGHTS> Weighting raster dataset
--weights-band <WEIGHTS-BAND> Band from which weights should be read (default: 1)
--pixels <PIXELS> Method to determine which pixels are included in stat calculation.. PIXELS=default|fractional|all-touched
--stat <STAT> Statistic(s) to compute for each zone. STAT=center_x|center_y|count|coverage|frac|max|max_center_x|max_center_y|mean|median|min|minority|min_center_x|min_center_y|mode|stdev|sum|unique|values|variance|variety|weighted_mean|weighted_stdev|weighted_sum|weighted_variance|weights [may be repeated] [required]
--include-field <INCLUDE-FIELD> Fields from polygon zones to include in output [may be repeated]
--strategy <STRATEGY> For polygon zones, whether to iterate over input features or raster chunks. STRATEGY=feature|raster (default: feature)
--chunk-size <CHUNK-SIZE> Maximum size of raster chunks read into memory (default: 5%)
Advanced Options:
--if, --input-format <INPUT-FORMAT> Input formats [may be repeated]
--oo, --open-option <KEY>=<VALUE> Open options [may be repeated]
--output-oo, --output-open-option <KEY>=<VALUE> Output open options [may be repeated]
--upsert Upsert features (implies 'append')
Mutually exclusive with --append
DESCRIPTION
gdal raster zonal-stats computes raster zonal statistics -- a summary
of pixel values within zones specified either polygon features or a
categorical raster.
[image] Mean elevation calculated for each polygon from an
elevation raster..UNINDENT
A weighting raster may be provided in addition to the source
raster, allowing calculation of statistics such as
population-weighted mean weather conditions.
All inputs should be provided in the same spatial reference system.
If input rasters use different resolutions they will be resampled
to a consistent resolution using average resampling. However, no
reprojection is performed.
Pixel inclusion and weighting
When zones are defined using polygons, three methods are available
for determining which pixels to include in the calculation. By
default, the geometries are rasterized using default parameters, and
pixels included in the rasterization are used in the calculation with
equal weighting. By using --pixels all-touched, all pixels touched
by the polygon are used in the calculation, again with equal
weighting. If using --pixels fractional, the fraction of each pixel
that is covered by the polygon is computed, and pixels are weighted
according to this fraction. This option requires GDAL be built
against version 3.14 or later of the GEOS library.
Supported stats
+------------------+---------------------------+
|Name | Description |
+------------------+---------------------------+
|center_x | Array with cell center |
| | x-coordinate for each |
| | cell that intersects the |
| | polygon. Each cell center |
| | may or may not be inside |
| | the polygon. |
+------------------+---------------------------+
|center_y | Array with cell center |
| | y-coordinate for each |
| | cell that intersects the |
| | polygon. Each cell center |
| | may or may not be inside |
| | the polygon. |
+------------------+---------------------------+
|count | Sum of all cell coverage |
| | fractions. |
+------------------+---------------------------+
|coverage | Array with coverage |
| | fraction of each cell |
| | that intersects the |
| | polygon |
+------------------+---------------------------+
|frac | Fraction of covered cells |
| | that are occupied by each |
| | distinct raster value, as |
| | provided by unique. |
+------------------+---------------------------+
|majority | The raster value |
| | occupying the greatest |
| | number of cells, taking |
| | into account cell |
| | coverage fractions but |
| | not weighting raster |
| | values. |
+------------------+---------------------------+
|max | Maximum value of cells |
| | that intersect the |
| | polygon, not taking |
| | coverage fractions or |
| | weighting raster values |
| | into account. |
+------------------+---------------------------+
|max_center_x | Cell center x-coordinate |
| | for the cell containing |
| | the maximum value |
| | intersected by the |
| | polygon. The center of |
| | this cell may or may not |
| | be inside the polygon. |
+------------------+---------------------------+
|max_center_y | Cell center y-coordinate |
| | for the cell containing |
| | the maximum value |
| | intersected by the |
| | polygon. The center of |
| | this cell may or may not |
| | be inside the polygon. |
+------------------+---------------------------+
|mean | Mean value of cells that |
| | intersect the polygon, |
| | weighted by the percent |
| | of each cell that is |
| | covered. |
+------------------+---------------------------+
|min | Minimum value of cells |
| | that intersect the |
| | polygon, not taking |
| | coverage fractions or |
| | weighting raster values |
| | into account. |
+------------------+---------------------------+
|min_center_x | Cell center x-coordinate |
| | for the cell containing |
| | the minimum value |
| | intersected by the |
| | polygon. The center of |
| | this cell may or may not |
| | be inside the polygon. |
+------------------+---------------------------+
|min_center_y | Cell center y-coordinate |
| | for the cell containing |
| | the minimum value |
| | intersected by the |
| | polygon. The center of |
| | this cell may or may not |
| | be inside the polygon. |
+------------------+---------------------------+
|minority | The raster value |
| | occupying the least |
| | number of cells, taking |
| | into account cell |
| | coverage fractions but |
| | not weighting raster |
| | values. |
+------------------+---------------------------+
|stdev | Population standard |
| | deviation of cell values |
| | that intersect the |
| | polygon, taking into |
| | account coverage |
| | fraction. |
+------------------+---------------------------+
|sum | Sum of values of raster |
| | cells that intersect the |
| | polygon, with each raster |
| | value weighted by its |
| | coverage fraction. |
+------------------+---------------------------+
|unique | Array of unique raster |
| | values for cells that |
| | intersect the polygon |
+------------------+---------------------------+
|values | Array of raster values |
| | for each cell that |
| | intersects the polygon |
+------------------+---------------------------+
|variance | Population variance of |
| | cell values that |
| | intersect the polygon, |
| | taking into account |
| | coverage fraction. |
+------------------+---------------------------+
|variety | The number of distinct |
| | raster values in cells |
| | wholly or partially |
| | covered by the polygon. |
+------------------+---------------------------+
|weighted_frac | Fraction of covered cells |
| | that are occupied by each |
| | distinct raster value, |
| | weighted by the value of |
| | a second weighting |
| | raster. Order corresponds |
| | to values returned by |
| | unique. |
+------------------+---------------------------+
|weighted_mean | Mean value of cells that |
| | intersect the polygon, |
| | weighted by the product |
| | over the coverage |
| | fraction and the |
| | weighting raster. |
+------------------+---------------------------+
|weighted_stdev | Weighted version of |
| | stdev. |
+------------------+---------------------------+
|weighted_variance | Weighted version of |
| | variance |
+------------------+---------------------------+
|weights | Array of weight values |
| | for each cell that |
| | intersects the polygon |
+------------------+---------------------------+
This algorithm can be part of a gdal pipeline.
The following options are available:
--stat <STAT>
Specifies one or more of the Supported stats to compute for
each zone.
--zones <ZONES>
The path to a dataset that defines the zones. If the dataset
has more than 1 raster band or feature layer, --zones-band or
--zones-layer must be specified.
--zones-band <ZONES-BAND>
Specifies the raster band from which zones can be read.
--zones-layer <ZONES-LAYER>
Specifies the feature layer from which zones can be read.
--weights <WEIGHTS>
Optional path to a dataset to use for weighting.
--weights-band <WEIGHTS-BAND>
Specifies the raster band from which weights can be read.
--pixels <PIXELS>
Method to determine which pixels should be included in the
calculation: default, all-touched, or fractional.
--chunk-size <MEMORY>
Defines the maximum size of raster chunks to read. May be
expressed as either an amount of memory (500 MB, 2 GB, etc.)
or as a percentage of available RAM (e.g. 10%).
--strategy <STRATEGY>
Specifies the the processing strategy (raster or feature),
when vector zones are used. In the default strategy
(--strategy feature), GDAL will iterate over the features in
the zone dataset, read the corresponding pixels from the
raster, and write the statistics for that feature. This avoids
the need to read the entire feature dataset into memory at
once, but may cause the same pixels to be read multiple times
if the polygon features are large or not ordered spatially. If
--strategy raster is used, GDAL will iterate over chunks of
the raster dataset, find corresponding polygon zones, and
update the statistics for those features. (The size of the
raster chunks can be controlled using :option:--chunk-size.)
This ensures that raster pixels are only read once, but may
cause the same features to be processed multiple times.
--include-field <INCLUDE-FIELD>
Specifies one or more fields from the zones to be copied to
the output. Only available when vector zones are used.
EXAMPLES
Example 1: Summarize mean elevation within 200m of points of interest
gdal pipeline read dem.tif ! \
zonal-stats \
--zones [ read points.geojson ! buffer 200 ] \
--stat mean ! \
write \
--output-format CSV \
--output /vsistdout/
Example 2: Create a layer with the highest points in each watershed
gdal pipeline read dem.tif !
zonal-stats \
--zones watersheds.shp \
--stat max_center_x \
--stat max_center_y !
make-point \
--x max_center_x \
--y max_center_y \
--dst-crs EPSG:4326 !
write out.geojson
AUTHOR
Dan Baston <dbaston@gmail.com>
COPYRIGHT
1998-2026
March 20, 2026 GDAL-RASTER-ZONAL-STATS(1)