The evoland-plus R package (evoland for evolving land use, plus for plus.ethz.ch) provides tools for land use change simulations. The package implements a statistically calibrated, constrained model for predicting locations of future land use / land cover change (LULCC).
The scope of evoland-plus is to:
- Gather and process LULCC and predictor data from multiple sources into a clearly defined database structure.
- Calibrate statistical models to understand historical land use transitions
- Project future land use patterns using predictive models and allocation algorithms
- Support scenario analysis through interventions and parameter modifications
Install the development version from GitHub:
# install.packages("remotes")
remotes::install_github("ethzplus/evoland-plus")
library(evoland)The package compiles C++ code, so you need a working build toolchain (Rtools on Windows, Xcode command line tools on macOS), and terra needs GDAL and PROJ.
If you manage project libraries with rv, add the package to your rproject.toml instead:
dependencies = [
{ name = "evoland", git = "https://github.com/ethzplus/evoland-plus/", branch = "main" },
]PRs are very welcome!
It's probably best to first discuss the underlying issue; @mmyrte is very happy to help figure out a solution.
Conventions for R, C++, SQL and prose are collected in the style guide; AGENTS.md has the project layout and development commands.
Code should be formatted with air before committing.
Tests are written as tinytests that can be run after package installation, ensuring that your system is set up correctly.
To work on the package itself with rv, install only its dependencies and load the package from your checkout:
dependencies = [
# only install dependencies declared in DESCRIPTION
{ name = "evoland", path = "~/path/to/local/repo", dependencies_only = true, install_suggestions = true },
"devtools", # sundry development tasks
"mirai", # modern multiprocessing
"httpgd", # webview plotting
"languageserver", # assuming your IDE loads the rv library instead of system
]devtools::load_all() then acts as though you were calling library(evoland) on an installed package, which makes it easy to reload code after a change.
evoland-plus places projected land use change on the map with one of three allocators:
db$alloc_clumpy(): stochastic patch-based allocation after CLUMPY, implemented in C++ and available wherever the package installs.db$alloc_greedy(): deterministic rank-and-fill allocation, a baseline for comparison.db$alloc_dinamica(): allocation with Dinamica EGO, which is optional. Dinamica only runs on Linux x86 / amd64 (the Windows installer exists but is untested withevoland-plus); see the Installing Dinamica EGO vignette, or use the Docker container on other platforms.
This package uses pkgdown, see http://ethzplus.github.io/evoland-plus.
- Tutorials & How-to Guides: Package vignettes and examples in R man pages
- Reference Documentation: R man pages using the standard
?function_name - Explanation & Design Rationale: See
devdocs/design/for the modelling workflow, the database schema and architecture decisions - Development guidelines and coding standards: See the style guide
This project is licensed under the AGPL-3 License - see the LICENSE.md file for details.
This work represents a re-implementation and enhancement of Benjamin Black's land use model published at https://github.com/ethzplus/evoland-plus-legacy, building on substantial prior experience while modernizing the technical implementation.