Last chance! 50% off unlimited learning
Sale ends in
Build and send an OSRM API query to get the travel geometry
between two points. This function interfaces with the route OSRM
service.
Use src
and dst
to get the shortest direct route between
two points.
Use loc
to get the shortest route between two points using
ordered waypoints.
osrmRoute(
src,
dst,
loc,
overview = "simplified",
exclude,
returnclass,
osrm.server = getOption("osrm.server"),
osrm.profile = getOption("osrm.profile")
)
The output of this function is an sf LINESTRING of the shortest route.
It contains 4 fields:
starting point identifier
destination identifier
travel time in minutes
travel distance in kilometers.
If src (or loc) is a vector, a data.frame or a matrix, the coordinate
reference system (CRS) of the route is EPSG:4326 (WGS84).
If src (or loc) is an sfc or sf object, the route has the same CRS
as src (or loc).
If overview is FALSE, a named numeric vector is returned. It contains travel time (in minutes) and travel distance (in kilometers).
starting point of the route.
src
can be:
a vector of coordinates (longitude and latitude, WGS 84),
a data.frame of longitudes and latitudes (WGS 84),
a matrix of longitudes and latitudes (WGS 84),
an sfc object of type POINT,
an sf object of type POINT.
If relevant, row names are used as identifiers.
If src
is a data.frame, a matrix, an sfc object or an sf object then
only the first row or element is considered.
destination of the route.
dst
can be:
a vector of coordinates (longitude and latitude, WGS 84),
a data.frame of longitudes and latitudes (WGS 84),
a matrix of longitudes and latitudes (WGS 84),
an sfc object of type POINT,
an sf object of type POINT.
If relevant, row names are used as identifiers.
If dst
is a data.frame, a matrix, an sfc object or an sf object then
only the first row or element is considered.
starting point, waypoints (optional) and destination of the
route. loc
can be:
a data.frame of longitudes and latitudes (WGS 84),
a matrix of longitudes and latitudes (WGS 84),
an sfc object of type POINT,
an sf object of type POINT.
The first row or element is the starting point then waypoints are used in
the order they are stored in loc
and the last row or element is
the destination.
If relevant, row names are used as identifiers.
"full", "simplified" or FALSE. Use "full" to return the detailed geometry, use "simplified" to return a simplified geometry, use FALSE to return only time and distance.
pass an optional "exclude" request option to the OSRM API.
deprecated.
the base URL of the routing server.
the routing profile to use, e.g. "car", "bike" or "foot".
if (FALSE) {
library(sf)
apotheke.df <- read.csv(system.file("csv/apotheke.csv", package = "osrm"))
apotheke.sf <- st_read(system.file("gpkg/apotheke.gpkg", package = "osrm"),
quiet = TRUE
)
# Travel path between points
route1 <- osrmRoute(src = apotheke.sf[1, ], dst = apotheke.sf[16, ])
# Display paths
plot(st_geometry(route1))
plot(st_geometry(apotheke.sf[c(1, 16), ]), col = "red", pch = 20, add = TRUE)
# Return only duration and distance
route3 <- osrmRoute(
src = apotheke.df[1, c("lon", "lat")],
dst = apotheke.df[16, c("lon", "lat")],
overview = FALSE
)
route3
# Using only coordinates
route4 <- osrmRoute(
src = c(13.412, 52.502),
dst = c(13.454, 52.592)
)
plot(st_geometry(route4))
# Using via points
route5 <- osrmRoute(loc = apotheke.sf[c(1, 2, 4, 3), ])
plot(st_geometry(route5), col = "red", lwd = 2)
plot(st_geometry(apotheke.sf[c(1, 2, 4, 3), ]), add = TRUE)
# Using a different routing server
u <- "https://routing.openstreetmap.de/routed-foot/"
route5 <- osrmRoute(apotheke.sf[1, ], apotheke.sf[16, ], osrm.server = u)
route5
# Using an open routing service with support for multiple modes
# see https://github.com/riatelab/osrm/issues/67
u <- "https://routing.openstreetmap.de/"
options(osrm.server = u)
route6 <- osrmRoute(apotheke.sf[1, ], apotheke.sf[16, ],
osrm.profile = "bike"
)
route7 <- osrmRoute(apotheke.sf[1, ], apotheke.sf[16, ],
osrm.profile = "car"
)
plot(st_geometry(route7), col = "green") # car
plot(st_geometry(route6), add = TRUE) # bike
plot(st_geometry(route5), col = "red", add = TRUE) # foot
}
Run the code above in your browser using DataLab