Raster algebra

Raster algebra (or raster map algebra) is probably the most general way of manipulating rasters which is accessible to the user.

if statement

Let's determine forested areas which are higher then certain elevation. Set computational region (both extent and resolution) to the landclass raster:
g.region rast=landclass96
See what are the land classes (raster categories) in the raster:
r.report map=landclass96 units=p
See also univariate statistics for the elevation raster:
r.univar map=elevation
Use raster algebra to select areas higher than chosen elevation and with forest land class:
r.mapcalc "forest_high = if(elevation > 120 && landclass96 == 5, 1, null())"

Advanced raster algebra

eval function

If the output of the computation should be only one map but the expression is so complex that it is better to split it to several expressions, the eval function can be used:
r.mapcalc "eval(elev_200 = elevation - 200, elev_5 = 5 * elevation, elev_p = pow(elev_5, 2)); elevation_result = (0.5 * elev_200) + 0.8 * elev_p"

neighborhood operator [ , ]

Apply low pass filter (smoothing) on a Landsat image using r.mapcalc:
r.mapcalc "lsat7_2002_10_smooth = (lsat7_2002_10[-1,-1] + lsat7_2002_10[-1,0] + lsat7_2002_10[1,1] + lsat7_2002_10[0,-1] + lsat7_2002_10[0,0] + lsat7_2002_10[0,1] + lsat7_2002_10[1,-1] + lsat7_2002_10[1,0] + lsat7_2002_10[1,1]) / 9"
Set the same color table as the original raster map has:
r.colors map=lsat7_2002_10_smooth raster=lsat7_2002_10
Use Map Swipe to compare original and resulting map. Map Swipe is available from File menu or using:
g.gui.mapswipe first=lsat7_2002_10 second=lsat7_2002_10_smooth
Note that in this case the same operation which was done using r.mapcalc could be done using r.neighbors module.

Learn more