In this use case, we show how rflsgen can be used to extract landscape structures from existing landscapes, and how to recreate neutral landscapes with the same structure, i.e. same composition patterns.

We focus on the forest cover of the main island of New Caledonia, a tropical archipelago located in the South Pacific. Using open data from the Copernicus Global Land Service database (see References), we produced a 105x105 m map with open and closed forest cover in the main island of New Caledonia:

library(raster)

path <- system.file("extdata",
"copernicus_nc_grande_terre_closed_and_open_forests_200m.tif",
package = "rflsgen")
existing_landscape <- raster(path)
plot(existing_landscape)

To extract the landscape structure, we use the flsgen_load_structure_from_raster function:

# The default memory allocated to the JVM by rJava is 512mb, which will be insufficient
# as the input raster is large (3297x2724). We increase it with the following line.
options(java.parameters = "-Xmx4g")
library(rflsgen)

struct <- flsgen_extract_structure_from_raster(path, c(0, 1),
connectivity = 8)

The second argument corresponds to the focal classes raster values (0 is open forest, and 1 is closed forest), and for this use case, we use the 8-connectivity rule.

We then use flsgen_generate to recreate a neutral landscape from the extracted structure. We use the digital elevation model of New Caledonia as the continuous environmental gradient.

dem_path <- system.file("extdata",
"dem_nc_grande_terre_200m.tif",
package = "rflsgen")
r <- flsgen_generate(struct, terrain_file = dem_path, terrain_dependency = 0.9,
epsg = "EPSG:3163", connectivity=8,
resolution_x = 105.4308639672429422,
resolution_y = 105.4037645741556588,
x = 159615, y = 467655)
plot(r)

It is interesting to see that the generated landscape has an almost inverted spatial distribution compared to the real landscape. This is not surprising as the forest cover in New Caledonia is known to be positively correlated with the elevation. If we want to generate a neutral forest landscape also positively correlated with the elevation, we just need to use and inverted digital elevation model

dem <- raster(dem_path)
values(dem) <- -values(dem)
r <- flsgen_generate(struct, terrain_file = dem, terrain_dependency = 0.9,
epsg = "EPSG:3163", connectivity=8,
resolution_x = 105.4308639672429422,
resolution_y = 105.4037645741556588,
x = 159615, y = 467655)

Note: We used geographical metadata from the original raster to produce a landscape with the same geographical attributes (epsg, resolution_x, resolution_y, x, and y).

## References

Buchhorn, M., Smets, B., Bertels, L., Roo, B. D., Lesiv, M., Tsendbazar, N.-E., Herold, M., & Fritz, S. (2020). Copernicus Global Land Service: Land Cover 100m: collection 3: epoch 2019: Globe (V3.0.1) [Data set]. Zenodo. https://doi.org/10.5281/ZENODO.3939050