Skip to contents

Results of a landscape analysis are scale dependent (Šímová 2012). One approach to deal with this is by using a moving window (Hagen-Zanker 2016). For each focal cell in the landscape, a matrix is used to specify the neighborhood and the metric value of this local neighborhood is assigned to each focal cell (Fletcher 2018). Thereby, the windows are allowed to overlap (McGarigal et al. 2012). The result of a moving window analysis is a raster with an identical extent as the input, however, each cell now describes the neighborhood in regard to the variability of the chosen metric (Hagen-Zanker 2016). Of course, the selection of the matrix size largely influences the scale of the result (Hagen-Zanker 2016).

Implementation in landscapemetrics

We provide the function window_lsm() in landscapemetrics to analyse an input raster using the moving window approach. The function allows to specify the neighborhood using a matrix using the terra::focal() function internally. Currently, only the landscape level metrics are possible to calculate and they can be specified similarly to calculate_lsm(). For details, see ?list_lsm().


# internal data needs to be read
landscape <- terra::rast(landscapemetrics::landscape)

First, we need to specify the local neighborhood matrix. This matrix must have sides defined as odd numbers, in which the focal cell is always the center cell (for more details, see ?terra::focal()).

moving_window <- matrix(1, nrow = 3, ncol = 3)
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    1    1    1
## [3,]    1    1    1

Now, we can easily pass this matrix to window_lsm() together with the input landscape. For this example, we want to calculate the number of classes (lsm_l_pr) and the joint entropy (lsm_l_joinent) for the local neighborhoods.

result <- window_lsm(landscape, window = moving_window, what = c("lsm_l_pr", "lsm_l_joinent"))
## $layer_1
## $layer_1$lsm_l_joinent
## class       : SpatRaster 
## dimensions  : 30, 30, 1  (nrow, ncol, nlyr)
## resolution  : 1, 1  (x, y)
## extent      : 0, 30, 0, 30  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source(s)   : memory
## name        :   clumps 
## min value   : 0.000000 
## max value   : 3.093069 
## $layer_1$lsm_l_pr
## class       : SpatRaster 
## dimensions  : 30, 30, 1  (nrow, ncol, nlyr)
## resolution  : 1, 1  (x, y)
## extent      : 0, 30, 0, 30  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source(s)   : memory
## name        : clumps 
## min value   :      1 
## max value   :      3

To be type-stable, the result will be a nested list. The first level includes all layers of a SpatRaster (only one if a SpatRaster is provided), the second level contains all selected metrics. The resulting SpatRaster describe the local neighborhood according to the moving window around each focal cell. In the case of lsm_l_pr this the number of classes present.

In the future, we also plan to allow class level metrics, however, patch metrics are not meaningful (McGarigal 2012) and will not be added in the future.


  • Fletcher, R., Fortin, M.-J. 2018. Spatial Ecology and Conservation Modeling: Applications with R. Springer International Publishing. 523 pages
  • Hagen-Zanker, A. 2016. A computational framework for generalized moving windows and its application to landscape pattern analysis. International journal of applied earth observation and geoinformation, 44, 205-216.
  • McGarigal K., SA Cushman, and E Ene. 2023. FRAGSTATS v4: Spatial Pattern Analysis Program for Categorical Maps. Computer software program produced by the authors; available at the following web site:
  • Šímová, P., & Gdulová, K. 2012. Landscape indices behavior: A review of scale effects. Applied Geography, 34, 385–394.