getPaths | R Documentation |
Get the shortest path for a given trip that requires travel through a
set of nodes. Use is like getCosts
, but with
nodes
and order parameters and no from
or to
.
getPaths(
region,
nodes,
id = "ID",
order = NULL,
x = "x",
y = "y",
costs = "all",
polygons = "centroid",
dir = tempdir(),
...
)
region |
A SpatVector, Spatial* or Raster* representing the area of maximum movement |
nodes |
One of data.frame, data.table, SpatVector, SpatialPointsDataFrame, or
SpatialPolygonsDataFrame representing the node locations.
If it is a polygon, the location will be controlled by the |
id |
A character string representing the column containing each |
order |
A character vector containing the desired path in
order of visited nodes by ID. Required if For example, to visit "A" then "B" then "C" then "A"
the vector would be |
x |
A character vector representing the column containing the 'x' coordinates.
Required if |
y |
A character vector representing the column containing the 'y' coordinates.
Required if |
costs |
A character vector containing any combination of the strings
of differential values present in the environment (see
|
polygons |
One of |
dir |
A filepath to the directory being used as the workspace.
Default is |
... |
Additional parameters to pass to |
SpatialVector lines representing least-cost paths. For each
cost, each entry within the SpatialLinesDataFrame object represents
a single leg of the journey, sorted in the original path order.
If length(costs) == 1
, only a SpatVector is returned.
If length(costs) > 1
a list of SpatVectors with one slot for each cost
is returned.
# Generate a DEM
n <- 5
dem <- expand.grid(list(x = 1:(n * 100),
y = 1:(n * 100))) / 100
dem <- as.data.table(dem)
dem[, z := 250 * exp(-(x - n/2)^2) +
250 * exp(-(y - n/2)^2)]
dem <- rast(dem)
ext(dem) <- c(10000, 20000, 30000, 40000)
crs(dem) <- "+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 +datum=WGS84"
# Export it so it doesn't just exist on the memory
dir <- tempdir()
writeRaster(dem, paste0(dir,"/DEM.tif"),overwrite=TRUE)
# Import raster, get the grid
dem <- rast(paste0(dir,"/DEM.tif"))
grid <- makeGrid(dem = dem, nx = n, ny = n, sources = TRUE)
region <- grid[8, ]
# Select all tiles that exist between x = (12000,16000) and y = (32000,36000)
tiles <- ext(c(12000,16000,32000,36000))
tiles <- as.polygons(tiles)
crs(tiles) <- crs(grid)
tiles <- whichTiles(region = tiles, polys = grid)
# Make a world but limit it to the DEM grid size
calculateCosts(tiles = tiles, dir = dir,
m = 70, v_max = 1.5, BMR = 76, k = 3.5, s = 0.05, l_s = 1,
L = 0.8)
# Generate five random points that fall within the region
points <- data.table(ID = 1:5,
x = runif(5, ext(region)[1], ext(region)[2]),
y = runif(5, ext(region)[3], ext(region)[4]))
# Calculate the path from 1 -> 2 -> 5 -> 1 -> 4
pathOrder <- c(1,2,5,1,4)
# Make a world but limit it to the DEM grid size
defineWorld(source = grid, cut_slope = 0.5,
res = res(dem), dir = dir, overwrite=TRUE)
paths <- getPaths(region = region, nodes = points, order = pathOrder,
costs = 'all', costFUN = energyCosts,
m = 70, v_max = 1.5, BMR = 76, k = 3.5, s = 0.05, l_s = 1,
L = 0.8)
## Plot against corridors (not run)
#getCosts(region = region, from = points, proj = crs(dem), res = res(dem),
# destination = 'all', costs = 'all',
# output = 'file', dir = dir)
#corridors <- makeCorridor(rasters = dir, order = pathOrder)
#plot(corridors$time)
#plot(paths$time,add=TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.