Skip to content

r.forestfrag

Computes the forest fragmentation index (Riitters et al. 2000)

r.forestfrag [-rtsa] input=name output=name [size=number] [pf=name] [pff=name] [window=integer] [--overwrite] [--verbose] [--quiet] [--qq] [--ui]

Example:

r.forestfrag input=name output=name

grass.script.run_command("r.forestfrag", input, output, size=3, pf=None, pff=None, window=None, flags=None, overwrite=False, verbose=False, quiet=False, superquiet=False)

Example:

gs.run_command("r.forestfrag", input="name", output="name")

Parameters

input=name [required]
    Name of forest raster map (where forest=1, non-forest=0)
output=name [required]
    Name for output raster map
size=number
    Moving window size (odd number)
    Allowed values: 3-
    Default: 3
pf=name
    Name for output Pf (forest area density) raster map
    Proportion of area which is forested (amount of forest)
pff=name
    Name for output Pff (forest connectivity) raster map
    Conditional probability that neighboring cell is forest
window=integer
    This option is deprecated, use the option size instead
    Allowed values: 3-
-r
    Set computational region to input raster map
-t
    Keep Pf and Pff maps
-s
    Run r.report on output map
-a
    Trim the output map to avoid border effects
--overwrite
    Allow output files to overwrite existing files
--help
    Print usage summary
--verbose
    Verbose module output
--quiet
    Quiet module output
--qq
    Very quiet module output
--ui
    Force launching GUI dialog

input : str, required
    Name of forest raster map (where forest=1, non-forest=0)
    Used as: input, raster, name
output : str, required
    Name for output raster map
    Used as: output, raster, name
size : int, optional
    Moving window size (odd number)
    Used as: number
    Allowed values: 3-
    Default: 3
pf : str, optional
    Name for output Pf (forest area density) raster map
    Proportion of area which is forested (amount of forest)
    Used as: output, raster, name
pff : str, optional
    Name for output Pff (forest connectivity) raster map
    Conditional probability that neighboring cell is forest
    Used as: output, raster, name
window : int, optional
    This option is deprecated, use the option size instead
    Allowed values: 3-
flags : str, optional
    Allowed values: r, t, s, a
    r
        Set computational region to input raster map
    t
        Keep Pf and Pff maps
    s
        Run r.report on output map
    a
        Trim the output map to avoid border effects
overwrite: bool, optional
    Allow output files to overwrite existing files
    Default: False
verbose: bool, optional
    Verbose module output
    Default: False
quiet: bool, optional
    Quiet module output
    Default: False
superquiet: bool, optional
    Very quiet module output
    Default: False

DESCRIPTION

r.forestfrag Computes the forest fragmentation following the methodology proposed by Riitters et al. (2000). See this article for a detailed explanation.

It follows a "sliding window" algorithm with overlapping windows. The amount of forest and its occurrence as adjacent forest pixels within fixed-area "moving-windows" surrounding each forest pixel is measured. The window size is user-defined. The result is stored at the location of the center pixel. Thus, a pixel value in the derived map refers to "between-pixel" fragmentation around the corresponding forest location.

As input it requires a binary map with (1) forest and (0) non-forest. Obviously, one can replace forest any other land cover type. If one wants to exclude the influence of a specific land cover type, e.g., water bodies, it should be classified as no-data (NA) in the input map. See e.g., blog post.

Let Pf be the proportion of pixels in the window that are forested. Define Pff (strictly) as the proportion of all adjacent (cardinal directions only) pixel pairs that include at least one forest pixel, for which both pixels are forested. Pff thus (roughly) estimates the conditional probability that, given a pixel of forest, its neighbor is also forest. The classification model then identifies six fragmentation categories as:

interior:       Pf = 1.0
patch:          Pf < 0.4
transitional:   0.4 ≤ Pf < 0.6
edge:           Pf ≥ 0.6 and Pf - Pff < 0
perforated:     Pf ≥ 0.6 and Pf - Pff > 0
undetermined:   Pf ≥ 0.6 and Pf = Pff

NOTES

  • The moving window size is user-defined (default=3) and must be an odd number. If an even number is given, the function will stop with an error message.
  • No-data cells are ignored. This means that statistics at the raster edges are based on fewer cells (smaller) moving windows. If this is a problem, the user can choose to have the output raster trimmed with a number of raster cells equal to 1/2 * the size of the moving window.
  • The function respects the region. However, the user has the option to set the region to match the input layer.

EXAMPLE

In the North Carolina sample Location, set the computational region to match the land classification raster map:

g.region raster=landclass96

Then mark all cells which are forest as 1 and everything else as zero:

r.mapcalc "forest = if(landclass96 == 5, 1, 0)"

Use the new forest presence raster map to compute the forest fragmentation index with window size 7:

r.forestfrag input=forest output=fragmentation window=7

image-alt image-alt

Two forest fragmentation indices with window size 7 (left) and 11 (right) show how increasing window size increases the amount of edges.

SEE ALSO

r.mapcalc, r.li

The addon is based on the r.forestfrag.sh script, with as extra options user-defined moving window size, option to trim the region (by default it respects the region) and a better handling of no-data cells.

REFERENCES

Riitters, K., J. Wickham, R. O'Neill, B. Jones, and E. Smith. 2000. Global-scale patterns of forest fragmentation. Conservation Ecology 4(2): 3. [online] URL: https://www.consecol.org/vol4/iss2/art3/

AUTHORS

Emmanuel Sambale (original shell version)
Stefan Sylla (original shell version)
Paulo van Breugel (Python version, user-defined moving window size)
Vaclav Petras (major code clean up)

SOURCE CODE

Available at: r.forestfrag source code (history)
Latest change: Thursday Mar 20 21:36:57 2025 in commit 7286ecf