r.out.gdal(1grass)

πŸ’– r.out.gdal β€” the GRASS manual page, bestie edition πŸ’–

okay so this is r.out.gdal, straight out of the GRASS User's Manual, and it's literally the glow-up station for your raster maps. We're exporting GRASS raster maps into GDAL supported formats. That's the whole vibe. Periodt.


✨ NAME ✨

r.out.gdal β€” Exports GRASS raster maps into GDAL supported formats. (yes bestie, that's it, that's the girl.)


πŸ”– KEYWORDS πŸ”–

raster, export, output


🌸 SYNOPSIS 🌸

r.out.gdal
r.out.gdal --help
r.out.gdal [-lcmtf] input=name output=name format=string  [type=string]
[createopt=string[,string,...]]   [metaopt=string[,string,...]]
[nodata=float]   [overviews=integer]   [offset=float]   [scale=float]
[--overwrite]  [--help]  [--verbose]  [--quiet]  [--ui]

πŸŽ€ Flags πŸŽ€

  • -l β€” List supported output formats. (the "what can we even do here" flag, lowkey essential)
  • -c β€” Do not write GDAL standard colortable. Only applicable to Byte or UInt16 data types. (so don't get any ideas with your Float64, bestie)
  • -m β€” Do not write non-standard metadata. Enhances compatibility with other GIS software. (making it play nice with the other apps, we love a diplomat)
  • -t β€” Write raster attribute table. Some export formats may not be supported. (iykyk, it's giving ✨maybe✨)
  • -f β€” Force raster export despite any warnings of data loss. Overrides nodata safety check. (> ⚠️ bestie this one is LOUD. It literally overrides the nodata safety check. It will do the thing even when it's warning you about losing data. main character energy, but be careful.)
  • --overwrite β€” Allow output files to overwrite existing files. (no take-backs)
  • --help β€” Print usage summary. (when you're lost, ask the girl herself)
  • --verbose β€” Verbose module output. (she will NOT stop talking and honestly? we love that)
  • --quiet β€” Quiet module output. (she will say nothing. mysterious. iconic.)
  • --ui β€” Force launching GUI dialog. (for when you want buttons instead of typing)

🧁 Parameters 🧁

  • input=name [required] β€” Name of raster map (or group) to export.
  • output=name [required] β€” Name for output raster file.
  • format=string [required] β€” Raster data format to write (case sensitive, see also -l flag). Options: GTiff, COG, VRT, NITF, HFA, AAIGrid, DTED, PNG, JPEG, MEM, GIF, FITS, BMP, PCIDSK, PCRaster, ILWIS, SRTMHGT, Leveller, Terragen, netCDF, HDF4Image, ISIS3, PDS4, VICAR, ERS, JP2OpenJPEG, GRIB, RMF, WMS, RST, GSAG, GSBG, GS7BG, KMLSUPEROVERLAY, WEBP, PDF, MBTiles, CALS, WMTS, MRF, PNM, BT, LCP, GTX, KRO, ROI_PAC, RRASTER, BAG, S102, S104, S111, NWT_GRD, PostGISRaster, SAGA, XYZ, HF2, ZMap, SIGDEM, AVIF, HEIF, JPEGXL, GPKG, OpenFileGDB, NGW, ENVI, EHdr, ISCE, Zarr, MiraMonRaster. Default: GTiff. (yes it's a long list. she contains multitudes.)
  • type=string β€” Data type. Options: Byte, Int16, UInt16, Int32, UInt32, Float32, Float64, CInt16, CInt32, CFloat32, CFloat64.
  • createopt=string[,string,...] β€” Creation option(s) to pass to the output format driver. In the form of "NAME=VALUE", separate multiple entries with a comma.
  • metaopt=string[,string,...] β€” Metadata key(s) and value(s) to include. In the form of "META-TAG=VALUE", separate multiple entries with a comma. Not supported by all output format drivers. (she's picky, okay?)
  • nodata=float β€” Assign a specified nodata value to output bands. If given, the nodata value is always written to metadata even if there are no NULL cells in the input band (enhances output compatibility).
  • overviews=integer β€” Number of overviews to create for the output dataset. Options: 0-5. Default: 0.
  • offset=float β€” Assign a specified offset value to output bands.
  • scale=float β€” Assign a specified scale value to output bands.

πŸ’… DESCRIPTION πŸ’…

r.out.gdal allows a user to export a GRASS raster map layer into any GDAL supported raster map format. So like, your GRASS raster? It leaves the house. It goes out into the world. πŸ¦‹

fr fr though β€” if a GRASS raster map is exported for a particular application, the application's native format would be preferable. GeoTIFF is supported by a wide range of applications (see also NOTES on GeoTIFF below). So GTiff is the safe friend, the one who gets along with everyone.

To specify multiple creation options use a comma separated list, like this:

createopt="TFW=YES,COMPRESS=DEFLATE"

For possible createopt and metaopt parameters please consult the individual supported formats pages on the GDAL website. And here's a lil tip from the manual itself: the createopt parameter may be used to create TFW or World files ("TFW=YES", "WORLDFILE=ON").

r.out.gdal also supports the export of multiband rasters as a group, when the imagery group's name is entered as input. (created imagery groups with the i.group module β€” yes, that's the one.) Multiband group export? she's giving full ensemble cast energy. 🌈

As with most GRASS raster modules, the current region extents and region resolution are used, and a raster mask is respected if present. Use g.region's "align=", or "raster=" options if you need to realign the region settings to match the original map's before export. So realign FIRST, bestie, not after. order matters, always. πŸ’€


πŸ‘‘ SUPPORTED RASTER FORMATS πŸ‘‘

The set of supported raster formats written by r.out.gdal depends on the local GDAL installation, printed with the -l flag. Available may be (incomplete list):

  • AAIGrid: Arc/Info ASCII Grid
  • BMP: MS Windows Device Independent Bitmap
  • BSB: Maptech BSB Nautical Charts
  • DTED: DTED Elevation Raster
  • ELAS: ELAS
  • ENVI: ENVI .hdr Labelled
  • FIT: FIT Image
  • GIF: Graphics Interchange Format (.gif)
  • GTiff: GeoTIFF
  • HDF4Image: HDF4 Dataset
  • HFA: Erdas Imagine Images (.img)
  • JPEG2000: JPEG-2000 part 1 (ISO/IEC 15444-1)
  • JPEG: JPEG JFIF
  • MEM: In Memory Raster
  • MFF2: Atlantis MFF2 (HKV) Raster
  • MFF: Atlantis MFF Raster
  • NITF: National Imagery Transmission Format
  • PAux: PCI .aux Labelled
  • PCIDSK: PCIDSK Database File
  • PNG: Portable Network Graphics
  • PNM: Portable Pixmap Format (netpbm)
  • VRT: Virtual Raster
  • XPM: X11 PixMap Format
🫢 reminder that this list is incomplete and depends on your local GDAL installation β€” run the -l flag to see what YOUR setup is serving today.

πŸ’… NOTES πŸ’…

okay so real talk bestie, out of all the GDAL data types, the closest match for GRASS CELL, FCELL and DCELL rasters are respectively Int32, Float32 and Float64. Like… they are not exact equivalents, but they will preserve the maximum possible data range and number of decimal places for each respective GRASS raster data type. 🫢 And please keep in mind that not all CELL rasters will require Int32 β€” e.g., a 0-255 CELL raster is covered by the Byte type as well. ✨

Moreover, some GDAL-supported formats do not support all the data types possible in GDAL and GRASS. So use r.info to check the data type and range for your GRASS raster, refer to specific format documentation (on the GDAL website), to format vendor's documentation, and e.g. the Wikipedia article Typical boundaries of primitive integral types for details. πŸ“š

🌈 Ranges of GDAL data types 🌈

GDAL data type        minimum      maximum
Byte                     0        255
UInt16                   0     65,535
Int16, CInt16         -32,768       32,767
UInt32                   0    4,294,967,295
Int32, CInt32  -2,147,483,648    2,147,483,647
Float32, CFloat32          -3.4E38       3.4E38
Float64, CFloat64        -1.79E308         1.79E308

If there is a need to keep file sizes small, use the simplest data type covering the data range of the raster(s) to be exported, e.g., if suitable use Byte rather than UInt16; use Int16 rather than Int32; or use Float32 rather than Float64. 🐜 And in addition, the COMPRESS createopt used can have a very large impact on the size of the output file.

Some software may not recognize all of the compression methods available for a given file format, and certain compression methods may only be supported for certain data types (depends on vendor and version). πŸ’€

By default, r.out.gdal identifies suitable settings for nodata and data type, if not given by the user. If however the export settings are set such that data loss would occur in the output file (i.e., due to the particular choice of data type and/or file type), the normal behaviour of r.out.gdal in this case would be to issue an error message describing the problem and exit without exporting. 😭

However, depending on the size of the data, tests to check for data loss may take some time. For performance reasons, these tests can be skipped if the -fb> flag, the nodatab> option and the typeb> option are all specified. The assumption here is that the user has made a deliberate choice about these settings and considered the potential risk of data loss when forcing the export with the -fb> flag. ⚠️

not me warning you that forcing the export is a whole decision β€” the tool is trusting that YOU meant it πŸ’…

r.out.gdal exports may appear all black or gray on initial display in other GIS software. This is not a bug of r.out.gdal, but often caused by the default color table assigned by that software. The default color table may be grayscale covering the whole range of possible values which is very large for e.g. Int32 or Float32. E.g. stretching the color table to actual min/max would help (sometimes under symbology). 🎨

πŸ¦‹ Adding overviews to speed up map display in other software πŸ¦‹

Adding overviews with gdaladdo after exporting can speed up display. The overviews are created internally within the exported file. The amount of levels (power-of-two factors) are controlled with the overviews parameter. The higher the overview level defined by the user the more lower resolution internal overviews are added. πŸ‘‘

Note that other software might create their own overviews, ignoring existing overviews. πŸ™ˆ

🌸 GeoTIFF caveats 🌸

GeoTIFF exports can only be displayed by standard image viewers if the GDAL data type was set to Byte and the GeoTIFF contains either one or three bands. All other data types and numbers of bands can be properly read with GIS software only. Although GeoTIFF files usually have a .tif extension, these files are not necessarily images but first of all spatial raster datasets, e.g. land cover or elevation. πŸ—ΊοΈ

When writing out multi-band GeoTIFF images for users of ESRI software or ImageMagick, the interleaving mode should be set to "pixel" using createopt="INTERLEAVE=PIXEL". BAND interleaving is slightly more efficient, but not supported by some applications. This issue only arises when writing out multi-band imagery groups. πŸ’…

Classic TIFF format supports only files with up to 4GB. Files that exceed this limit (in compressed or uncompressed form) need to be exported with createopt="BIGTIFF=YES". BIGTIFF is available if GDAL is built with libtiff &= 4.0. πŸ”₯

✨ Improving GeoTIFF compatibility ✨

To create a GeoTIFF that is highly compatible with various other GIS software packages, it is recommended to keep the GeoTIFF file as simple as possible. You will have to experiment with which options your software is compatible with, as this varies widely between vendors and versions. Long term, the less metadata you have to remove the more self-documenting (and useful) the dataset will be. πŸ’–

Here are some things to try:

  • Create a World file with createopt="TFW=YES". 🌍
  • Do not use GeoTIFF internal compression. Other GIS software often supports only a subset of the available compression methods with the supported methods differing between GIS software packages. Unfortunately this means the output image can be rather huge, but the file can be compressed with software like zip, gnuzip, or bzip2. 😭
  • Skip exporting the color table. Color tables are not always properly rendered, particularly for type UInt16, and the GeoTIFF file can appear completely black. If you are lucky the problematic software package has a method to reset the color table and assign a new color table (sometimes called symbology). πŸŽ€
  • Keep metadata simple with createopt="PROFILE=GeoTIFF" or createopt="PROFILE=BASELINE". With BASELINE no GDAL or GeoTIFF tags will be written and a World file is required (createopt="TFW=YES"). ⭐

πŸ’œ Offset/scale parameters πŸ’œ

Offset is only relevant if not zero. Scale is only relevant if not 1. 🧚

🌈 EXAMPLES 🌈

πŸ’… Export the integer raster basin_50K map to GeoTIFF format

Also peep the GeoTIFF format description over at (GDAL), bestie:

g.region raster=basin_50K -p
r.out.gdal input=basin_50K output=basin_50K.tif

πŸ¦‹ Export the integer raster landclass96 map to Cloud Optimized GeoTIFF format

And go read the Cloud Optimized GeoTIFF (COG) format description (GDAL) too:

g.region -p raster=landclass96
r.out.gdal -fmt input=landclass96 output=landclass96.tif format=COG overviews=4

πŸŽ€ Export a DCELL raster map in GeoTIFF format suitable for ESRI software

g.region raster=elevation -p
r.out.gdal in=elevation output=elevation.tif createopt="PROFILE=GeoTIFF,TFW=YES"

✨ Export a raster map in "Deflate" compressed GeoTIFF format

g.region raster=elevation -p
r.out.gdal in=elevation output=elevation.tif createopt="COMPRESS=DEFLATE"

πŸ“ Export a large raster map in LZW compressed (Big) GeoTIFF format

# integer map export
g.region raster=zipcodes -p
# Using PREDICTOR 2 for integer maps can further reduce file size
r.out.gdal in=zipcodes output=zipcodes.tif createopt="COMPRESS=LZW,PREDICTOR=2,BIGTIFF=YES"
# floating point map export
g.region raster=elevation -p
# Using PREDICTOR 3 for floating point data can further reduce file size
r.out.gdal in=elevation output=elevation.tif createopt="COMPRESS=LZW,PREDICTOR=3,BIGTIFF=YES"

πŸ”₯ Export a raster map with internal overview in "Deflate" compressed GeoTIFF format

g.region raster=elevation -p
# overviews=5 corresponds to ’gdaladdo ... 2 4 8 16 32’
r.out.gdal in=elevation output=elevation.tif createopt="COMPRESS=DEFLATE" overviews=5

🌈 Export R,G,B imagery bands in GeoTIFF format suitable for ESRI software

i.group group=nc_landsat_rgb input=lsat7_2002_30,lsat7_2002_20,lsat7_2002_10
g.region raster=lsat7_2002_30 -p
r.out.gdal in=nc_landsat_rgb output=nc_landsat_rgb.tif type=Byte \
  createopt="PROFILE=GeoTIFF,INTERLEAVE=PIXEL,TFW=YES"

πŸ‘‘ Export group of image maps as multi-band file

g.list group
i.group group=tm7 subgroup=tm7 input=tm7_10,tm7_20,tm7_30,tm7_40,tm7_50,tm7_60,tm7_70
i.group -l tm7
g.region raster=tm7_10 -p
r.out.gdal tm7 output=lsat_multiband.tif
gdalinfo lsat_multiband.tif

🧚 Export RGB with alpha channel that encodes NULL cells

So when you're exporting RGB data instead of GIS data β€” like for Web applications, or honestly just any visualization situation β€” the alpha channel is so useful. And here the export type is usually the Byte data type.

When you export data with r.out.gdal, assigning a nodata value (which is a specific parameter of the module, iykyk) means that any band values equal to this nodata value get interpreted as nodata. But if you use an extra alpha channel? Then every pixel with an alpha value of 0 is transparent. So the alpha channel is doing per-pixel encoding of nodata, literally just like the GRASS raster mask or per-raster null file. Which means when you're using an alpha channel, you do not need to "free up" any particular value β€” you can use any value you like to replace NULL cells, as long as the value can be represented by the Byte data type. And it does not matter if that value is already present in any of the input bands. πŸ’…

So for "visual-only" RGB data export you need to create an additional alpha channel that encodes all NULL cells, and in the RGB bands being exported you replace the NULL cells with some value in the range 0-255. Like, for example:

# for simplicity variables are used
RMAP="lsat7_2000_30"
GMAP="lsat7_2000_20"
BMAP="lsat7_2000_10"
OUTNAME="lsat7_2000_RGBA.tif"
# extract alpha
r.mapcalc "out_a = if(isnull($RMAP) || isnull($GMAP) || isnull($BMAP), 0, 255)"
# replace NULL cells with a valid value, extract colors
# exporting 8 bit RGB data, not GIS data, therefore the `#` operator:
r.mapcalc "out_r = if(isnull($RMAP), 0, #$RMAP)"
r.mapcalc "out_g = if(isnull($GMAP), 0, #$GMAP)"
r.mapcalc "out_b = if(isnull($BMAP), 0, #$BMAP)"
# create group for export
i.group group=out_rgba input=out_r,out_g,out_b,out_a
# remove any mask because this works only if there are
# no NULL cells in the bands to be exported
r.mask -r
# export the group:
# add PROFILE=BASELINE to createopt to produce a standard TIFF file
# without any GTiff extensions
r.out.gdal input=out_rgba output=$OUTNAME -cm createopt="PHOTOMETRIC=RGB,ALPHA=YES"
gdalinfo $OUTNAME

And the resulting GeoTIFF file can be used for, like, Web server applications and stuff. 🫢

πŸ’œ Export the floating point raster elevation map to ERDAS/IMG format

Also check the Erdas Imagine .img format description (GDAL):

g.region raster=elevation -p
r.out.gdal input=elevation output=elelevation.img format=HFA type=Float32

🌸 Export raster map with offset/scale assigned

An offset value can be assigned to output raster data with the offset parameter. And in the same way, a scale value can be assigned with the scale parameter. adorable.

# produce raster map
g.region n=100 s=0 e=100 w=0 res=1
r.random.cells output=random distance=1.0
r.info -r random
# export raster data with offset/scale assigned
r.out.gdal input=random output=random.tif offset=100 scale=0.01

Check the result with the gdalinfo command line tool:

gdalinfo random.tif
...
Band 1 Block=100x40 Type=UInt16, ColorInterp=Palette
  Description = random
    Computed Min/Max=1.000,3661.000
  NoData Value=65535
  Offset: 100,   Scale:0.01
...

  • "ERROR 6: SetColorInterpretation() not supported for this dataset." β€” this may mean the color table didn't get written properly. But usually it will be correct and you can just ignore the message, bestie, it's fine.
  • "ERROR 6: SetNoDataValue() not supported for this dataset." β€” the output format you picked does not support "no data". If your data contains NULLs, it's recommended to use a different output format. fr fr.
  • "Warning 1: Lost metadata writing to GeoTIFF ... too large to fit in tag." β€” the color table metadata might be too large. It's recommended to simplify it or not write the color table at all, or use a different output format, or use the flags -c and -m.

πŸ”— REFERENCES πŸ”—

GDAL Pages: https://gdal.org


πŸ‘€ SEE ALSO πŸ‘€

  • GDAL supported raster formats and GDAL supported vector formats
  • r.out.ascii, r.out.bin, r.out.mat, r.out.png, r.out.ppm, r.pack

🫢 AUTHORS 🫢

  • Vytautas Vebra (oliver4grass at gmail.com)
  • Markus Metz (improved nodata logic)

⭐ SOURCE CODE ⭐

Available at: r.out.gdal source code (history)

Latest change: Tuesday Dec 23 23:30:51 2025 in commit: 2550be39b3524cf105ce856cb27ac8efaeef1bfb

Main index | Raster index | Topics index | Keywords index | Graphical index | Full index


Β© 2003-2026 GRASS Development Team, GRASS 8.5.0 Reference Manual

And that's a wrap, bestie πŸ’– this whole saga lives in the GRASS 8.5.0 reference manual as r.out.gdal(1grass) β€” go export something iconic, periodt. πŸ‘‘βœ¨

πŸ“¦ where this page comes from