get_distance_matrix: Compute all shortest distance between origin and destination...

View source: R/get_distance_mat.R

get_distance_matrixR Documentation

Compute all shortest distance between origin and destination nodes.

Description

Compute all shortest distance between origin and destination nodes.

Usage

get_distance_matrix(
  Graph,
  from,
  to,
  algorithm = "phast",
  aggregate_aux = FALSE,
  allcores = FALSE
)

Arguments

Graph

An object generated by makegraph, cpp_simplify or cpp_contract function.

from

A vector of one or more vertices from which distances are calculated (origin).

to

A vector of one or more vertices (destination).

algorithm

Character. Only for contracted graph, mch for Many to many CH, phast for PHAST algorithm

aggregate_aux

Logical. If TRUE, the additional weight is summed along shortest paths.

allcores

Logical (deprecated). If TRUE, all cores are used.

Details

If graph is not contracted, get_distance_matrix() recursively perform Dijkstra algorithm for each from nodes. If graph is contracted, the user has the choice between :

  • many to many contraction hierarchies (mch) : optimal for square matrix.

  • PHAST (phast) : outperform mch on rectangular matrix

Shortest path is always computed according to the main edge weights, corresponding to the 3rd column of df argument in makegraph() function. If aggregate_aux argument is TRUE, the values returned are the sum of auxiliary weights along shortest paths.

All algorithms are multithreaded. allcores argument is deprecated, please use RcppParallel::setThreadOptions() to set the number of threads.

See details in package website : https://github.com/vlarmet/cppRouting/blob/master/README.md

Value

Matrix of shortest distances.

Note

It is not possible to aggregate auxiliary weights on a Graph object coming from cpp_simplify function.

See Also

get_distance_pair, get_multi_paths

Examples

#Choose number of cores used by cppRouting
RcppParallel::setThreadOptions(numThreads = 1)

#Data describing edges of the graph
edges <- data.frame(from_vertex = c(0,0,1,1,2,2,3,4,4),
                    to_vertex = c(1,3,2,4,4,5,1,3,5),
                    time = c(9,2,11,3,5,12,4,1,6),
                    dist = c(5,3,4,7,5,5,5,8,7))

#Construct directed  graph with travel time as principal weight, and distance as secondary weight
graph <- makegraph(edges[,1:3], directed=TRUE, aux = edges$dist)

#Get all nodes IDs
nodes <- graph$dict$ref

# Get matrix of shortest times between all nodes : the result are in time unit
time_mat <- get_distance_matrix(graph, from = nodes, to = nodes)

# Get matrix of distance according shortest times : the result are in distance unit
dist_mat <- get_distance_matrix(graph, from = nodes, to = nodes, aggregate_aux = TRUE)

print(time_mat)
print(dist_mat)

cppRouting documentation built on Dec. 1, 2022, 5:08 p.m.