GDAL-VECTOR-GRID(1) GDAL GDAL-VECTOR-GRID(1)
gdal-vector-grid - Create a regular grid from scattered points
Added in version 3.11.
Usage: gdal vector grid <SUBCOMMAND> [OPTIONS]
where <SUBCOMMAND> is one of:
- average: Create a regular grid from scattered points using moving average interpolation.
- average-distance: Create a regular grid from scattered points using the average distance between the grid node (center of the search ellipse) and all of the data points in the search ellipse.
- average-distance-points: Create a regular grid from scattered points using the average distance between the data points in the search ellipse.
- count: Create a regular grid from scattered points using the number of points in the search ellipse.
- invdist: Create a regular grid from scattered points using weighted inverse distance interpolation.
- invdistnn: Create a regular grid from scattered points using weighted inverse distance interpolation nearest neighbour.
- linear: Create a regular grid from scattered points using linear/barycentric interpolation.
- maximum: Create a regular grid from scattered points using the maximum value in the search ellipse.
- minimum: Create a regular grid from scattered points using the minimum value in the search ellipse.
- nearest: Create a regular grid from scattered points using nearest neighbor interpolation.
- range: Create a regular grid from scattered points using the difference between the minimum and maximum values in the search ellipse.
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]
This program creates a regular grid (raster) from the scattered data
read from a vector dataset. Input data will be interpolated to fill
grid nodes with values, you can choose from various interpolation
methods.
It is possible to set the GDAL_NUM_THREADS configuration option to
parallelize the processing. The value to specify is the number of
worker threads, or ALL_CPUS to use all the cores/CPUs of the
computer.
Since GDAL 3.12, this algorithm can be part of a gdal pipeline.
-f, --of, --format, --output-format <OUTPUT-FORMAT>
Which output raster format to use. Allowed values may be given
by gdal --formats | grep raster | grep + | sort
--co, --creation-option <NAME>=<VALUE>
Many formats have one or more optional dataset creation
options that can be used to control particulars about the file
created. For instance, the GeoPackage driver supports creation
options to control the version.
May be repeated.
The dataset 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 Vector drivers format specific
documentation for legal creation options for each format.
Note that dataset creation options are different from layer
creation options.
--overwrite
Allow program to overwrite existing target file or dataset.
Otherwise, by default, gdal errors out if the target file or
dataset already exists.
-l, --layer, --layer-name <LAYER-NAME>
Indicates the layer(s) from the datasource that will be used
for input features. May be specified multiple times
--sql <SQL>|@<filename>
An SQL statement to be evaluated against the datasource to
produce a virtual layer of features to be burned in. The
@filename syntax can be used to indicate that the content is
in the pointed filename.
--extent <xmin>,<ymin>,<xmax>,<ymax>
Set georeferenced extents. The values must be expressed in
georeferenced units. If not specified, the extent of the
output file will be the extent of the vector layers.
--resolution <xres>,<yres>
Set target resolution. The values must be expressed in
georeferenced units. Both must be positive values. Note that
--resolution cannot be used with --size.
--size <xsize>,<ysize>
Set output file size in pixels and lines. Note that --size
cannot be used with --resolution.
--ot, --datatype, --output-data-type <OUTPUT-DATA-TYPE>
Force the output bands to be of the indicated data type.
Defaults to Float64.
--crs <CRS>
Override the projection for the output file. If not specified,
the projection of the input vector file will be used if
available. When using this option, no reprojection of features
from the CRS of the input vector to the specified CRS of the
output raster, so use only this option to correct an invalid
source CRS. The <CRS> may be any of the usual GDAL/OGR forms,
complete WKT, PROJ.4, EPSG:n or a file containing the WKT.
--bbox <xmin>,<ymin>,<xmax>,<ymax>
Select only points contained within the specified bounding
box.
--zfield <field_name>
Identifies an attribute field on the features to be used to
get a Z value from. This value overrides the Z value read from
the feature geometry record (naturally, if you have a Z value
in the geometry, otherwise you have no choice and should
specify a field name containing a Z value).
--zincrease <increase_value>
Addition to the attribute field on the features to be used to
get a Z value from. The addition should be the same unit as
the Z value. The result value will be Z value + Z increase
value. The default value is 0.
--zmultiply <multiply_value>
This is multiplication ratio for the Z field. This can be used
for a shift from e.g. feet to meters or from elevation to
depth. The result value will be (Z value + Z increase value) *
Z multiply value. The default value is 1.
--oo, --open-option <NAME>=<VALUE>
Dataset open option (format specific).
May be repeated.
--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.
Interpolation using an inverse distance to a power.
When --min-points-per-quadrant or --max-points-per-quadrant is
specified, the actual algorithm used is "invdistnn".
--power <val>
Weighting power (default 2.0).
--smoothing <val>
Smoothing parameter (default 0.0).
--radius <val>
Set first and second radius (mutually exclusive with --radius1
and --radius2. By default, uses the whole point array.
--radius1 <val>
The first radius (X axis if rotation angle is 0) of the search
ellipse. By default, uses the whole point array.
--radius2 <val>
The second radius (Y axis if rotation angle is 0) of the
search ellipse. By default, uses the whole point array.
--angle <val>
Angle of search ellipse rotation in degrees (counter
clockwise, default is 0).
--max-points <val>
Maximum number of data points to use. Do not search for more
points than this number. This may only used if the search
ellipse is set (both radii are non-zero). By default, no
limitation.
--min-points <val>
Minimum number of data points to use. If less points in the
search ellipse than the specified value are found, the grid
node considered empty and will be filled with the nodata
value. This may only used if the search ellipse is set (both
radii are non-zero). By default, no limitation.
--max-points-per-quadrant <val>
Maximum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
only take into account up to max_points_per_quadrant points
for each of the right-top, left-top, right-bottom and
right-top quadrant relative to the point being interpolated.
--min-points-per-quadrant <val>
Minimum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
collect at least min_points_per_quadrant points for each of
the right-top, left-top, right-bottom and right-top quadrant
relative to the point being interpolated.
--nodata <val>
Nodata value to fill empty points (default is 0).
Interpolation using an inverse distance to a power with nearest
neighbor searching, ideal when --max-points is used.
When --min-points-per-quadrant or --max-points-per-quadrant is
specified, the search will start with the closest point to the point
being interpolated from the first quadrant, then the closest point to
the point being interpolated from the second quadrant, etc. up to the
4th quadrant, and will continue with the next closest point in the
first quadrant, etc. until --max-points and/or
--max-points-per-quadrant thresholds are reached.
--radius <val>
Set search radius (mutually exclusive with --radius1 and
--radius2. Required.
--power <val>
Weighting power (default 2.0).
--smoothing <val>
Smoothing parameter (default 0.0).
--max-points <val>
Maximum number of data points to use. Do not search for more
points than this number. This may only used if the search
ellipse is set (both radii are non-zero). By default, no
limitation.
--min-points <val>
Minimum number of data points to use. If less points in the
search ellipse than the specified value are found, the grid
node considered empty and will be filled with the nodata
value. This may only used if the search ellipse is set (both
radii are non-zero). By default, no limitation.
--max-points-per-quadrant <val>
Maximum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
only take into account up to max_points_per_quadrant points
for each of the right-top, left-top, right-bottom and
right-top quadrant relative to the point being interpolated.
--min-points-per-quadrant <val>
Minimum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
collect at least min_points_per_quadrant points for each of
the right-top, left-top, right-bottom and right-top quadrant
relative to the point being interpolated.
--nodata <val>
Nodata value to fill empty points (default is 0).
Interpolation using a moving average algorithm.
When --min-points-per-quadrant or --max-points-per-quadrant is
specified, the search will start with the closest point to the point
being interpolated from the first quadrant, then the closest point to
the point being interpolated from the second quadrant, etc. up to the
4th quadrant, and will continue with the next closest point in the
first quadrant, etc. until --max-points and/or
--max-points-per-quadrant thresholds are reached.
--radius <val>
Set first and second radius (mutually exclusive with --radius1
and --radius2. By default, uses the whole point array.
--radius1 <val>
The first radius (X axis if rotation angle is 0) of the search
ellipse. By default, uses the whole point array.
--radius2 <val>
The second radius (Y axis if rotation angle is 0) of the
search ellipse. By default, uses the whole point array.
--angle <val>
Angle of search ellipse rotation in degrees (counter
clockwise, default is 0).
--max-points <val>
Maximum number of data points to use. Do not search for more
points than this number. This may only used if the search
ellipse is set (both radii are non-zero). By default, no
limitation.
--min-points <val>
Minimum number of data points to use. If less points in the
search ellipse than the specified value are found, the grid
node considered empty and will be filled with the nodata
value. This may only used if the search ellipse is set (both
radii are non-zero). By default, no limitation.
--max-points-per-quadrant <val>
Maximum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
only take into account up to max_points_per_quadrant points
for each of the right-top, left-top, right-bottom and
right-top quadrant relative to the point being interpolated.
--min-points-per-quadrant <val>
Minimum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
collect at least min_points_per_quadrant points for each of
the right-top, left-top, right-bottom and right-top quadrant
relative to the point being interpolated.
--nodata <val>
Nodata value to fill empty points (default is 0).
Interpolation using nearest neighbor algorithm.
--radius <val>
Set first and second radius (mutually exclusive with --radius1
and --radius2. By default, uses the whole point array.
--radius1 <val>
The first radius (X axis if rotation angle is 0) of the search
ellipse. By default, uses the whole point array.
--radius2 <val>
The second radius (Y axis if rotation angle is 0) of the
search ellipse. By default, uses the whole point array.
--angle <val>
Angle of search ellipse rotation in degrees (counter
clockwise, default is 0).
--nodata <val>
Nodata value to fill empty points (default is 0).
Linear interpolation by computing a Delaunay triangulation of the
point cloud, finding in which triangle of the triangulation the point
is, and by doing linear interpolation from its barycentric
coordinates within the triangle. If the point is not in any
triangle, depending on the radius, the algorithm will use the value
of the nearest point or the nodata value.
--radius <val>
In case the point to be interpolated does not fit into a
triangle of the Delaunay triangulation, use that maximum
distance to search a nearest neighbour, or use nodata
otherwise. If unset, the search distance is infinite. If set
to 0, nodata value will be always used.
--nodata <val>
Nodata value to fill empty points (default is 0).
Besides the interpolation functionality gdal vector grid can be used
to compute some data metrics using the specified window and output
grid geometry. These metrics are:
+o minimum: Minimum value found in grid node search ellipse.
+o maximum: Maximum value found in grid node search ellipse.
+o range: A difference between the minimum and maximum values found in
grid node search ellipse.
+o count: A number of data points found in grid node search ellipse.
+o average-distance: An average distance between the grid node (center
of the search ellipse) and all of the data points found in grid
node search ellipse.
+o average-distance-points: An average distance between the data
points found in grid node search ellipse. The distance between each
pair of points within ellipse is calculated and average of all
distances is set as a grid node value.
All the metrics have the same set of options:
--radius <val>
Set first and second radius (mutually exclusive with --radius1
and --radius2. By default, uses the whole point array.
--radius1 <val>
The first radius (X axis if rotation angle is 0) of the search
ellipse. By default, uses the whole point array.
--radius2 <val>
The second radius (Y axis if rotation angle is 0) of the
search ellipse. By default, uses the whole point array.
--angle <val>
Angle of search ellipse rotation in degrees (counter
clockwise, default is 0).
--min-points <val>
Minimum number of data points to use. If less points in the
search ellipse than the specified value are found, the grid
node considered empty and will be filled with the nodata
value. This may only used if the search ellipse is set (both
radii are non-zero). By default, no limitation.
--max-points-per-quadrant <val>
Maximum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
only take into account up to max_points_per_quadrant points
for each of the right-top, left-top, right-bottom and
right-top quadrant relative to the point being interpolated.
--min-points-per-quadrant <val>
Minimum number of data points to use per quadrant. By
default, no limitation. If that number is not reached, the
point being interpolated will be set with the nodata value.
When specified, the algorithm will collect at least
min_points_per_quadrant points for each of the right-top,
left-top, right-bottom and right-top quadrant relative to the
point being interpolated.
--nodata <val>
Nodata value to fill empty points (default is 0).
When --min-points-per-quadrant or --max-points-per-quadrant is
specified, the search will start with the closest point to the point
being interpolated from the first quadrant, then the closest point to
the point being interpolated from the second quadrant, etc. up to the
4th quadrant, and will continue with the next closest point in the
first quadrant, etc. until --max-points and/or
--max-points-per-quadrant thresholds are reached.
Often you have a text file with a list of comma separated XYZ values
to work with (so called CSV file). You can easily use that kind of
data source in gdal vector grid. All you need is to create a virtual
dataset header (VRT) for your CSV file and use it as an input
datasource for gdal vector grid. You can find details on the VRT
format on the VRT -- OGR Virtual Format description page.
Here is a small example. Let's say we have a CSV file called dem.csv
containing
Easting,Northing,Elevation
86943.4,891957,139.13
87124.3,892075,135.01
86962.4,892321,182.04
87077.6,891995,135.01
...
For the above data we will create a dem.vrt header with the following
content:
<OGRVRTDataSource>
<OGRVRTLayer name="dem">
<SrcDataSource>dem.csv</SrcDataSource>
<GeometryType>wkbPoint</GeometryType>
<GeometryField encoding="PointFromColumns" x="Easting" y="Northing" z="Elevation"/>
</OGRVRTLayer>
</OGRVRTDataSource>
This description specifies so called 2.5D geometry with three
coordinates X, Y and Z. The Z value will be used for interpolation.
Now you can use dem.vrt with all OGR programs (start with ogrinfo
to test that everything works fine). The datasource will contain a
single layer called "dem" filled with point features constructed
from values in the CSV file. Using this technique you can handle CSV
files with more than three columns, switch columns, etc. OK, now
the final step:
gdal vector grid invdist dem.vrt demv.tif
Or, if we do not wish to use a VRT file:
gdal vector grid invdist -l dem -oo X_POSSIBLE_NAMES=Easting \
-oo Y_POSSIBLE_NAMES=Northing --zfield=Elevation dem.csv dem.tif
If your CSV file does not contain column headers then it can be
handled in the VRT file in the following way:
<GeometryField encoding="PointFromColumns" x="field_1" y="field_2" z="field_3"/>
The Comma Separated Value (.csv) description page contains details on
CSV format supported by GDAL.
Added in version 3.12.
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.
NOTE:
However this algorithm is not natively streaming compatible.
Consequently a temporary dataset will be generated, which may
cause significant processing time at opening.
Example 1: Create a raster from a VRT datasource using inverse distance
to a power
gdal vector grid invdist --power=2.0 --smoothing=1.0 --extent=85000,894000,89000,890000 \
--size=400,400 -l dem dem.vrt dem.tif
This example creates a raster TIFF file from the VRT datasource
described in Reading comma separated values section using the inverse
distance to a power method. Values to interpolate will be read from
Z value of geometry record.
Example 2: Read values to interpolate from an attribute field
gdal vector grid invdist --zfield=Elevation --config GDAL_NUM_THREADS ALL_CPUS \
--power=2.0 --smoothing=1.0 --extent=85000,894000,89000,890000 \
--size=400,400 -l dem dem.vrt dem.tif
This command does the same thing as the previous one, but reads
values to interpolate from the attribute field specified with
--zfield option instead of geometry record. So in this case X and Y
coordinates are being taken from geometry and Z is being taken from
the "Elevation" field. The GDAL_NUM_THREADS is also set to
parallelize the computation.
Even Rouault <even.rouault@spatialys.com>
1998-2026
March 20, 2026 GDAL-VECTOR-GRID(1)
NAME
gdal-vector-grid - Create a regular grid from scattered points
Added in version 3.11.
SYNOPSIS
Usage: gdal vector grid <SUBCOMMAND> [OPTIONS]
where <SUBCOMMAND> is one of:
- average: Create a regular grid from scattered points using moving average interpolation.
- average-distance: Create a regular grid from scattered points using the average distance between the grid node (center of the search ellipse) and all of the data points in the search ellipse.
- average-distance-points: Create a regular grid from scattered points using the average distance between the data points in the search ellipse.
- count: Create a regular grid from scattered points using the number of points in the search ellipse.
- invdist: Create a regular grid from scattered points using weighted inverse distance interpolation.
- invdistnn: Create a regular grid from scattered points using weighted inverse distance interpolation nearest neighbour.
- linear: Create a regular grid from scattered points using linear/barycentric interpolation.
- maximum: Create a regular grid from scattered points using the maximum value in the search ellipse.
- minimum: Create a regular grid from scattered points using the minimum value in the search ellipse.
- nearest: Create a regular grid from scattered points using nearest neighbor interpolation.
- range: Create a regular grid from scattered points using the difference between the minimum and maximum values in the search ellipse.
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]
DESCRIPTION
This program creates a regular grid (raster) from the scattered data
read from a vector dataset. Input data will be interpolated to fill
grid nodes with values, you can choose from various interpolation
methods.
It is possible to set the GDAL_NUM_THREADS configuration option to
parallelize the processing. The value to specify is the number of
worker threads, or ALL_CPUS to use all the cores/CPUs of the
computer.
Since GDAL 3.12, this algorithm can be part of a gdal pipeline.
OPTIONS COMMON TO ALL ALGORITHMS
Standard options
-f, --of, --format, --output-format <OUTPUT-FORMAT>
Which output raster format to use. Allowed values may be given
by gdal --formats | grep raster | grep + | sort
--co, --creation-option <NAME>=<VALUE>
Many formats have one or more optional dataset creation
options that can be used to control particulars about the file
created. For instance, the GeoPackage driver supports creation
options to control the version.
May be repeated.
The dataset 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 Vector drivers format specific
documentation for legal creation options for each format.
Note that dataset creation options are different from layer
creation options.
--overwrite
Allow program to overwrite existing target file or dataset.
Otherwise, by default, gdal errors out if the target file or
dataset already exists.
-l, --layer, --layer-name <LAYER-NAME>
Indicates the layer(s) from the datasource that will be used
for input features. May be specified multiple times
--sql <SQL>|@<filename>
An SQL statement to be evaluated against the datasource to
produce a virtual layer of features to be burned in. The
@filename syntax can be used to indicate that the content is
in the pointed filename.
--extent <xmin>,<ymin>,<xmax>,<ymax>
Set georeferenced extents. The values must be expressed in
georeferenced units. If not specified, the extent of the
output file will be the extent of the vector layers.
--resolution <xres>,<yres>
Set target resolution. The values must be expressed in
georeferenced units. Both must be positive values. Note that
--resolution cannot be used with --size.
--size <xsize>,<ysize>
Set output file size in pixels and lines. Note that --size
cannot be used with --resolution.
--ot, --datatype, --output-data-type <OUTPUT-DATA-TYPE>
Force the output bands to be of the indicated data type.
Defaults to Float64.
--crs <CRS>
Override the projection for the output file. If not specified,
the projection of the input vector file will be used if
available. When using this option, no reprojection of features
from the CRS of the input vector to the specified CRS of the
output raster, so use only this option to correct an invalid
source CRS. The <CRS> may be any of the usual GDAL/OGR forms,
complete WKT, PROJ.4, EPSG:n or a file containing the WKT.
--bbox <xmin>,<ymin>,<xmax>,<ymax>
Select only points contained within the specified bounding
box.
--zfield <field_name>
Identifies an attribute field on the features to be used to
get a Z value from. This value overrides the Z value read from
the feature geometry record (naturally, if you have a Z value
in the geometry, otherwise you have no choice and should
specify a field name containing a Z value).
--zincrease <increase_value>
Addition to the attribute field on the features to be used to
get a Z value from. The addition should be the same unit as
the Z value. The result value will be Z value + Z increase
value. The default value is 0.
--zmultiply <multiply_value>
This is multiplication ratio for the Z field. This can be used
for a shift from e.g. feet to meters or from elevation to
depth. The result value will be (Z value + Z increase value) *
Z multiply value. The default value is 1.
Advanced options
--oo, --open-option <NAME>=<VALUE>
Dataset open option (format specific).
May be repeated.
--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.
INVDIST ALGORITHM
Interpolation using an inverse distance to a power.
When --min-points-per-quadrant or --max-points-per-quadrant is
specified, the actual algorithm used is "invdistnn".
Options
--power <val>
Weighting power (default 2.0).
--smoothing <val>
Smoothing parameter (default 0.0).
--radius <val>
Set first and second radius (mutually exclusive with --radius1
and --radius2. By default, uses the whole point array.
--radius1 <val>
The first radius (X axis if rotation angle is 0) of the search
ellipse. By default, uses the whole point array.
--radius2 <val>
The second radius (Y axis if rotation angle is 0) of the
search ellipse. By default, uses the whole point array.
--angle <val>
Angle of search ellipse rotation in degrees (counter
clockwise, default is 0).
--max-points <val>
Maximum number of data points to use. Do not search for more
points than this number. This may only used if the search
ellipse is set (both radii are non-zero). By default, no
limitation.
--min-points <val>
Minimum number of data points to use. If less points in the
search ellipse than the specified value are found, the grid
node considered empty and will be filled with the nodata
value. This may only used if the search ellipse is set (both
radii are non-zero). By default, no limitation.
--max-points-per-quadrant <val>
Maximum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
only take into account up to max_points_per_quadrant points
for each of the right-top, left-top, right-bottom and
right-top quadrant relative to the point being interpolated.
--min-points-per-quadrant <val>
Minimum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
collect at least min_points_per_quadrant points for each of
the right-top, left-top, right-bottom and right-top quadrant
relative to the point being interpolated.
--nodata <val>
Nodata value to fill empty points (default is 0).
INVDISTNN ALGORITHM
Interpolation using an inverse distance to a power with nearest
neighbor searching, ideal when --max-points is used.
When --min-points-per-quadrant or --max-points-per-quadrant is
specified, the search will start with the closest point to the point
being interpolated from the first quadrant, then the closest point to
the point being interpolated from the second quadrant, etc. up to the
4th quadrant, and will continue with the next closest point in the
first quadrant, etc. until --max-points and/or
--max-points-per-quadrant thresholds are reached.
Required option
--radius <val>
Set search radius (mutually exclusive with --radius1 and
--radius2. Required.
Options
--power <val>
Weighting power (default 2.0).
--smoothing <val>
Smoothing parameter (default 0.0).
--max-points <val>
Maximum number of data points to use. Do not search for more
points than this number. This may only used if the search
ellipse is set (both radii are non-zero). By default, no
limitation.
--min-points <val>
Minimum number of data points to use. If less points in the
search ellipse than the specified value are found, the grid
node considered empty and will be filled with the nodata
value. This may only used if the search ellipse is set (both
radii are non-zero). By default, no limitation.
--max-points-per-quadrant <val>
Maximum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
only take into account up to max_points_per_quadrant points
for each of the right-top, left-top, right-bottom and
right-top quadrant relative to the point being interpolated.
--min-points-per-quadrant <val>
Minimum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
collect at least min_points_per_quadrant points for each of
the right-top, left-top, right-bottom and right-top quadrant
relative to the point being interpolated.
--nodata <val>
Nodata value to fill empty points (default is 0).
AVERAGE ALGORITHM
Interpolation using a moving average algorithm.
When --min-points-per-quadrant or --max-points-per-quadrant is
specified, the search will start with the closest point to the point
being interpolated from the first quadrant, then the closest point to
the point being interpolated from the second quadrant, etc. up to the
4th quadrant, and will continue with the next closest point in the
first quadrant, etc. until --max-points and/or
--max-points-per-quadrant thresholds are reached.
Options
--radius <val>
Set first and second radius (mutually exclusive with --radius1
and --radius2. By default, uses the whole point array.
--radius1 <val>
The first radius (X axis if rotation angle is 0) of the search
ellipse. By default, uses the whole point array.
--radius2 <val>
The second radius (Y axis if rotation angle is 0) of the
search ellipse. By default, uses the whole point array.
--angle <val>
Angle of search ellipse rotation in degrees (counter
clockwise, default is 0).
--max-points <val>
Maximum number of data points to use. Do not search for more
points than this number. This may only used if the search
ellipse is set (both radii are non-zero). By default, no
limitation.
--min-points <val>
Minimum number of data points to use. If less points in the
search ellipse than the specified value are found, the grid
node considered empty and will be filled with the nodata
value. This may only used if the search ellipse is set (both
radii are non-zero). By default, no limitation.
--max-points-per-quadrant <val>
Maximum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
only take into account up to max_points_per_quadrant points
for each of the right-top, left-top, right-bottom and
right-top quadrant relative to the point being interpolated.
--min-points-per-quadrant <val>
Minimum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
collect at least min_points_per_quadrant points for each of
the right-top, left-top, right-bottom and right-top quadrant
relative to the point being interpolated.
--nodata <val>
Nodata value to fill empty points (default is 0).
NEAREST ALGORITHM
Interpolation using nearest neighbor algorithm.
Options
--radius <val>
Set first and second radius (mutually exclusive with --radius1
and --radius2. By default, uses the whole point array.
--radius1 <val>
The first radius (X axis if rotation angle is 0) of the search
ellipse. By default, uses the whole point array.
--radius2 <val>
The second radius (Y axis if rotation angle is 0) of the
search ellipse. By default, uses the whole point array.
--angle <val>
Angle of search ellipse rotation in degrees (counter
clockwise, default is 0).
--nodata <val>
Nodata value to fill empty points (default is 0).
LINEAR ALGORITHM
Linear interpolation by computing a Delaunay triangulation of the
point cloud, finding in which triangle of the triangulation the point
is, and by doing linear interpolation from its barycentric
coordinates within the triangle. If the point is not in any
triangle, depending on the radius, the algorithm will use the value
of the nearest point or the nodata value.
Options
--radius <val>
In case the point to be interpolated does not fit into a
triangle of the Delaunay triangulation, use that maximum
distance to search a nearest neighbour, or use nodata
otherwise. If unset, the search distance is infinite. If set
to 0, nodata value will be always used.
--nodata <val>
Nodata value to fill empty points (default is 0).
DATA METRICS ALGORITHMS
Besides the interpolation functionality gdal vector grid can be used
to compute some data metrics using the specified window and output
grid geometry. These metrics are:
+o minimum: Minimum value found in grid node search ellipse.
+o maximum: Maximum value found in grid node search ellipse.
+o range: A difference between the minimum and maximum values found in
grid node search ellipse.
+o count: A number of data points found in grid node search ellipse.
+o average-distance: An average distance between the grid node (center
of the search ellipse) and all of the data points found in grid
node search ellipse.
+o average-distance-points: An average distance between the data
points found in grid node search ellipse. The distance between each
pair of points within ellipse is calculated and average of all
distances is set as a grid node value.
All the metrics have the same set of options:
--radius <val>
Set first and second radius (mutually exclusive with --radius1
and --radius2. By default, uses the whole point array.
--radius1 <val>
The first radius (X axis if rotation angle is 0) of the search
ellipse. By default, uses the whole point array.
--radius2 <val>
The second radius (Y axis if rotation angle is 0) of the
search ellipse. By default, uses the whole point array.
--angle <val>
Angle of search ellipse rotation in degrees (counter
clockwise, default is 0).
--min-points <val>
Minimum number of data points to use. If less points in the
search ellipse than the specified value are found, the grid
node considered empty and will be filled with the nodata
value. This may only used if the search ellipse is set (both
radii are non-zero). By default, no limitation.
--max-points-per-quadrant <val>
Maximum number of data points to use per quadrant. By
default, no limitation. When specified, the algorithm will
only take into account up to max_points_per_quadrant points
for each of the right-top, left-top, right-bottom and
right-top quadrant relative to the point being interpolated.
--min-points-per-quadrant <val>
Minimum number of data points to use per quadrant. By
default, no limitation. If that number is not reached, the
point being interpolated will be set with the nodata value.
When specified, the algorithm will collect at least
min_points_per_quadrant points for each of the right-top,
left-top, right-bottom and right-top quadrant relative to the
point being interpolated.
--nodata <val>
Nodata value to fill empty points (default is 0).
When --min-points-per-quadrant or --max-points-per-quadrant is
specified, the search will start with the closest point to the point
being interpolated from the first quadrant, then the closest point to
the point being interpolated from the second quadrant, etc. up to the
4th quadrant, and will continue with the next closest point in the
first quadrant, etc. until --max-points and/or
--max-points-per-quadrant thresholds are reached.
READING COMMA SEPARATED VALUES
Often you have a text file with a list of comma separated XYZ values
to work with (so called CSV file). You can easily use that kind of
data source in gdal vector grid. All you need is to create a virtual
dataset header (VRT) for your CSV file and use it as an input
datasource for gdal vector grid. You can find details on the VRT
format on the VRT -- OGR Virtual Format description page.
Here is a small example. Let's say we have a CSV file called dem.csv
containing
Easting,Northing,Elevation
86943.4,891957,139.13
87124.3,892075,135.01
86962.4,892321,182.04
87077.6,891995,135.01
...
For the above data we will create a dem.vrt header with the following
content:
<OGRVRTDataSource>
<OGRVRTLayer name="dem">
<SrcDataSource>dem.csv</SrcDataSource>
<GeometryType>wkbPoint</GeometryType>
<GeometryField encoding="PointFromColumns" x="Easting" y="Northing" z="Elevation"/>
</OGRVRTLayer>
</OGRVRTDataSource>
This description specifies so called 2.5D geometry with three
coordinates X, Y and Z. The Z value will be used for interpolation.
Now you can use dem.vrt with all OGR programs (start with ogrinfo
to test that everything works fine). The datasource will contain a
single layer called "dem" filled with point features constructed
from values in the CSV file. Using this technique you can handle CSV
files with more than three columns, switch columns, etc. OK, now
the final step:
gdal vector grid invdist dem.vrt demv.tif
Or, if we do not wish to use a VRT file:
gdal vector grid invdist -l dem -oo X_POSSIBLE_NAMES=Easting \
-oo Y_POSSIBLE_NAMES=Northing --zfield=Elevation dem.csv dem.tif
If your CSV file does not contain column headers then it can be
handled in the VRT file in the following way:
<GeometryField encoding="PointFromColumns" x="field_1" y="field_2" z="field_3"/>
The Comma Separated Value (.csv) description page contains details on
CSV format supported by GDAL.
Added in version 3.12.
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.
NOTE:
However this algorithm is not natively streaming compatible.
Consequently a temporary dataset will be generated, which may
cause significant processing time at opening.
EXAMPLES
Example 1: Create a raster from a VRT datasource using inverse distance
to a power
gdal vector grid invdist --power=2.0 --smoothing=1.0 --extent=85000,894000,89000,890000 \
--size=400,400 -l dem dem.vrt dem.tif
This example creates a raster TIFF file from the VRT datasource
described in Reading comma separated values section using the inverse
distance to a power method. Values to interpolate will be read from
Z value of geometry record.
Example 2: Read values to interpolate from an attribute field
gdal vector grid invdist --zfield=Elevation --config GDAL_NUM_THREADS ALL_CPUS \
--power=2.0 --smoothing=1.0 --extent=85000,894000,89000,890000 \
--size=400,400 -l dem dem.vrt dem.tif
This command does the same thing as the previous one, but reads
values to interpolate from the attribute field specified with
--zfield option instead of geometry record. So in this case X and Y
coordinates are being taken from geometry and Z is being taken from
the "Elevation" field. The GDAL_NUM_THREADS is also set to
parallelize the computation.
AUTHOR
Even Rouault <even.rouault@spatialys.com>
COPYRIGHT
1998-2026
March 20, 2026 GDAL-VECTOR-GRID(1)