The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
Calculation of slope-dependent accumulated cost surfaces, least-cost paths, least-cost corridors, least-cost networks, ranked alternative routes, cost allocation, and cost boundaries related to human movement across the landscape, with 26 selectable cost functions. See Alberti (2019) doi:10.1016/j.softx.2019.100331 for an earlier version of the package.
Version 3.0 is a ground-up architectural redesign of the 2.x series.
The analytical capabilities and the cost functions are retained; what
changes is how the package computes, scales, and visualises. See
NEWS.md for the full list of changes and the 2.x-to-3.0
function correspondence table.
Build the cost graph once with
mc_surface(); reuse it with every analysis function;
visualise on demand with plot().
Computation and visualisation are fully decoupled: every function
returns an object that stores its results, and the
plot()/autoplot() methods (ggplot2) can be
invoked, customised, and re-invoked at any time without re-running
anything.
library(movecost)
# sample data shipped with the package
dtm <- mc_volc() # SpatRaster
start <- mc_volc_loc() # sf points
destin <- mc_destin_loc() # sf points
# 1. build the cost surface ONCE (Tobler's on-path hiking function)
surf <- mc_surface(dtm, funct = "t", move = 16)
# 2. reuse it across analyses - nothing is recomputed
acc <- mc_accum(surf, origin = start, breaks = 0.05) # isochrones
lcp <- mc_paths(surf, origin = start, destin = destin) # least-cost paths
nw <- mc_network(surf, nodes = destin) # LCP network + cost matrix
al <- mc_alloc(surf, origin = destin) # cost allocation
rk <- mc_rank(surf, start, destin[2, ], k = 4) # ranked alternatives
bd <- mc_boundary(surf, destin[1:3, ], limit = 5, time = "m")
co <- mc_corridor(surf, a = destin[1, ], b = destin[4, ])
# 3. visualise on demand; plots are ggplot objects, customise at will
plot(acc)
p <- plot(lcp) + ggplot2::ggtitle("My custom title")
p
ggplot2::ggsave("lcp.pdf", p, width = 7, height = 7)
# compare cost functions
cmp <- mc_comp(dtm, start, destin[2, ], functs = c("t", "ks", "hrz"))
plot(cmp); plot(cmp, type = "chart")
# the 26 implemented cost functions, annotated
mc_cost_functions()
# persistence and GIS export
mc_save(surf, "surf.rds"); surf <- mc_load("surf.rds")
mc_export(lcp, dir = "outputs")install.packages(c("terra", "sf", "igraph", "ggplot2", "devtools"))
devtools::install() # run from the package root
# optional extras:
install.packages("elevatr") # online DTM download via mc_dtm()To (re)generate the help files from the roxygen2 annotations and run the full quality pipeline:
devtools::document() # builds man/*.Rd from the roxygen2 annotations
devtools::test() # runs the analytic + consistency test suite
devtools::check() # full R CMD checkThe computational core was validated against analytic results on
synthetic terrains, against internal consistency laws, and against the
2.x (gdistance-based) procedure: see inst/validation/ and
the testthat suite. Two deliberate methodological corrections (corridor
directionality; signed-slope handling in the ks and
ma cost functions) are documented in NEWS.md
and in ?mc_cost_functions.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.