stplanr
This package is for sustainable transport planning with R (hence the name stplanr).
It brings together a range of tools for transport planning practitioners and researchers to better understand transport systems and inform policy.
The initial work on the project was funded by the Department of Transport (DfT) as part of the Propensity to Cycle Tool (PCT) project to identify where bicycle paths are most urgently needed. Please see the package vignette or an academic paper on the PCT for more information on how it can be used. This README gives some basics.
stplanr should be useful to researchers everywhere. The function route_graphhopper()
, for example, works anywhere in the world using the graphhopper routing API and read_table_builder()
reads-in Australian data. We welcome contributions that make transport research easier worldwide.
Key functions
Data frames representing flows between origins and destinations must be combined with geo-referenced zones or points to generate meaningful analyses and visualisations of 'flows' or origin-destination (OD) data (Caceres 2007). stplanr facilitates this with od2line()
, which takes flow and geographical data as inputs and outputs a SpatialLinesDataFrame
. Some example data is provided in the package:
library(stplanr)
data(cents, flow)
Let's take a look at this data:
flow[1:3, 1:3] # typical form of flow data
#> Area.of.residence Area.of.workplace All
#> 920573 E02002361 E02002361 109
#> 920575 E02002361 E02002363 38
#> 920578 E02002361 E02002367 10
cents[1:3,] # points representing origins and destinations
#> class : SpatialPointsDataFrame
#> features : 3
#> extent : -1.546463, -1.511861, 53.8041, 53.81161 (xmin, xmax, ymin, ymax)
#> coord. ref. : +init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
#> variables : 4
#> names : geo_code, MSOA11NM, percent_fem, avslope
#> min values : E02002382, Leeds 053, 0.408759, 2.284782
#> max values : E02002393, Leeds 064, 0.458721, 2.856563
These datasets can be combined as follows:
travel_network <- od2line(flow = flow, zones = cents)
w <- flow$All / max(flow$All) *10
plot(travel_network, lwd = w)
The package can also allocate flows to the road network, for example through a link to the CycleStreets.net API.
Route functions take lat/lon inputs:
trip <-
route_cyclestreet(from = c(-1, 53), to = c(-1.1, 53), plan = "balanced")
and place names, found using the Google Map API:
trip <- route_cyclestreet("London", "Birmingham, UK", plan = "balanced")
# devtools::install_github("mtennekes/tmap", subdir = "pkg")
library(tmap)
osm_tiles <- read_osm(bb(bbox(trip), ext = 1.5))
tm_shape(osm_tiles) +
tm_raster() +
tm_shape(trip) +
tm_lines(lwd = 3)
We can replicate this call to CycleStreets.net multiple times using line2route
.
# Remove intra-zone flow
intrazone <- travel_network$Area.of.residence == travel_network$Area.of.workplace
travel_network <- travel_network[!intrazone,]
t_routes <- line2route(travel_network)
plot(t_routes)
Another way to visualise this is with the leaflet package (not shown):
library(leaflet)
leaflet() %>% addTiles() %>% addPolylines(data = t_routes)
For more examples, example("line2route")
.
overline
is a function which takes a series of route-allocated lines, splits them into unique segmentes and aggregates the values of overlapping lines. This can represent where there will be most traffic on the transport system, as illustrated below using the tmap package.
t_routes$All <- travel_network$All
rnet <- overline(sldf = t_routes, attrib = "All", fun = sum)
osm_tiles <- read_osm(bb(rnet, ext = 1.05))
rnet$lwd <- rnet$All / mean(rnet$All)
tm_shape(osm_tiles) +
tm_raster(saturation = .25) +
tm_shape(rnet) +
tm_lines(lwd = "lwd", scale = 5, legend.lwd.show = FALSE) +
tm_shape(cents) +
tm_bubbles()
Installation
To install the stable version, use:
install.packages("stplanr")
The development version can be installed using devtools:
# install.packages("devtools") # if not already installed
devtools::install_github("ropensci/stplanr")
library(stplanr)
stplanr depends on rgdal, which can be tricky to install.
Installing rgdal on Ubuntu and Mac
On Ubuntu rgdal can be installed with:
sudo apt-get install r-cran-rgdal
Using apt-get ensures the system dependencies, such as gdal are also installed.
On Mac, homebrew can install gdal. Full instructions are provided here.
Funtions, help and contributing
The current list of available functions can be seen with:
lsf.str("package:stplanr", all = TRUE)
To get internal help on a specific function, use the standard way.
?od2line
Meta
- Please report issues, feature requests and questions to the github issue tracker
- License: MIT
- Get citation information for
stplanr
in R doingcitation(package = 'stplanr')
- This project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.