Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
podcast
Filter by Categories
ArcGIS Pro
GDAL
GeoJson
Map
Python
QGIS
Uncategorized

Nodata raster values with GDAL

A guide to nodata values in rasters using GDAL

Nodata values in rasters represent missing or invalid data in a spatial grid, such as a digital elevation model (DEM), a land cover map, or a remotely sensed image. In GIS (Geographical Information Systems), nodata values help maintain the integrity of analyses and visualizations by distinguishing between areas with no information and those with legitimate values. This guide will provide an overview of nodata values in rasters and how to handle them using GDAL (Geospatial Data Abstraction Library).

Understanding nodata values: Nodata values are often assigned a specific numeric value to indicate that data is missing or invalid. Common nodata values include -9999, -999, -32768, or -3.4e38, depending on the dataset and software used. It is essential to know the nodata value for your raster dataset, as it will affect your analysis and interpretation of the data.

Want to stay ahead of the geospatial curve? Listen to our podcast!

Install GDAL: To work with GDAL, you need to have it installed on your system. You can download the appropriate version for your operating system from the official GDAL website (https://gdal.org/download.html) or install it using package managers like apt, yum, or conda.

Identify nodata values in raster files:

To identify nodata values in a raster using GDAL, you can use the gdalinfo command-line utility:

gdalinfo path/to/raster/file.tif

Look for the NoData Value entry in the output. The nodata value will be displayed there.

Visualize raster data with nodata values:

To visualize a raster with nodata values, you can use a GIS software like QGIS or ArcGIS, which can read and display raster data with nodata values correctly. GDAL itself does not provide visualization tools, as it is primarily a data processing library.

Manage nodata values in raster operations:

When performing raster operations and analyses using GDAL, it’s essential to account for nodata values. GDAL and its utilities usually handle nodata values automatically, excluding them from calculations.

For example, if you want to calculate the statistics of a raster, you can use the gdalinfo utility with the -stats flag:

gdalinfo -stats path/to/raster/file.tif

The calculated statistics will exclude nodata values.

Replace nodata values:

In some cases, you may want to replace nodata values with a specific value, either to fill gaps in the data or for better visualization. You can do this using the gdal_calc.py utility:

gdal_calc.py -A path/to/input/raster.tif --outfile=path/to/output/raster.tif --calc="A*(A!=nodata_value) + (A==nodata_value)*new_value" --NoDataValue=0

Replace nodata_value with the actual nodata value of the input raster, and new_value with the value you want to replace nodata values with.

Set nodata values for a raster:

If your raster does not have a nodata value defined or you want to change the nodata value, you can use the gdal_translate utility:

gdal_translate -a_nodata new_nodata_value path/to/input/raster.tif path/to/output/raster.tif

Replace new_nodata_value with the new nodata value you want to set for the output raster.

Fill nodata

To fill nodata values with GDAL, you can use the gdal_fillnodata.py script, which is included in the GDAL library. The script uses an inverse distance weighting (IDW) algorithm to fill nodata values based on the values of the surrounding cells.

Here’s how to use the gdal_fillnodata.py script:

  1. Open a command prompt or terminal.
  2. Run the gdal_fillnodata.py script with the input raster file and the output file as arguments:
gdal_fillnodata.py input_raster.tif output_raster_filled.tif

Replace input_raster.tif with the path to your input raster file and output_raster_filled.tif with the path to the output raster file where the nodata values have been filled.

The script provides additional optional parameters to control the filling process:

  • -md max_distance: The maximum distance (in pixels) to search for valid cells to use for filling nodata cells. The default value is 100.
  • -si smoothing_iterations: The number of smoothing iterations to perform. Increasing this value can result in a smoother output, but it may also increase the processing time. The default value is 0 (no smoothing).
  • -b band: The band number to process. The default value is 1 (the first band).

For example, if you want to set the maximum search distance to 50 pixels and perform 3 smoothing iterations, run the following command:

gdal_fillnodata.py -md 50 -si 3 input_raster.tif output_raster_filled.tif

After running the script, you’ll have a new raster file (`output_raster_filled.tif`) with the nodata values filled using the specified parameters.

Remember to replace input_raster.tif with the path to your input raster file and output_raster_filled.tif with the path to the output raster file where the nodata values have been filled.

Keep in mind that the choice of filling method and parameters depends on your specific use case, the characteristics of your raster dataset, and the underlying geographic phenomenon. It’s essential to evaluate and validate the filled data to ensure that it meets your requirements and doesn’t introduce biases or artifacts that could affect the accuracy of your analysis or visualization.

When working with nodata values in rasters, it’s crucial to understand their implications, identify them, and manage them appropriately during raster operations and visualization. Proper handling of nodata values helps maintain the accuracy and reliability of your spatial analyses.

Recommended further reading about GDAL
About the Author
I'm Daniel O'Donohue, the voice and creator behind The MapScaping Podcast ( A podcast for the geospatial community ). With a professional background as a geospatial specialist, I've spent years harnessing the power of spatial to unravel the complexities of our world, one layer at a time.

Leave a Reply