diff --git a/NAMESPACE b/NAMESPACE
index f30348ae..810b4d6e 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -53,6 +53,7 @@ export(line2pointsn)
export(line2vertices)
export(line_bearing)
export(line_breakup)
+export(line_cast)
export(line_midpoint)
export(line_segment)
export(line_via)
@@ -89,6 +90,9 @@ export(rnet_breakup_vertices)
export(rnet_duplicated_vertices)
export(rnet_get_nodes)
export(rnet_group)
+export(rnet_join)
+export(rnet_split_lines)
+export(rnet_subset)
export(route)
export(route_average_gradient)
export(route_dodgr)
diff --git a/R/data.R b/R/data.R
index 7768f15b..2af721fe 100644
--- a/R/data.R
+++ b/R/data.R
@@ -125,7 +125,7 @@ NULL
#' @format A spatial lines dataset with 49 rows and 15 columns
NULL
-#' spatial lines dataset representing a route network
+#' Spatial lines dataset representing a route network
#'
#'
#' The flow of commuters using different segments of the road network represented in the
@@ -138,6 +138,19 @@ NULL
#' @format A spatial lines dataset 80 rows and 1 column
NULL
+#' Spatial lines dataset representing a small route network
+#'
+#'
+#' The flow between randomly selected vertices on the `osm_net_example`.
+#' See `data-raw/route_network_small.R` for details.
+#'
+#' @family data
+#' @docType data
+#' @keywords datasets
+#' @name route_network_small
+#' @format A spatial lines dataset with one column: flow
+NULL
+
#' Example of OpenStreetMap road network
#' @docType data
#' @keywords datasets
diff --git a/R/rnet_join.R b/R/rnet_join.R
new file mode 100644
index 00000000..33c8fe30
--- /dev/null
+++ b/R/rnet_join.R
@@ -0,0 +1,146 @@
+#' Join route networks
+#'
+#' This is a spatial join function that is enables adding columns to a
+#' 'target' route network from a 'source' route
+#' network that contains the base geometry, e.g. from OSM
+#'
+#' The output is an sf object containing polygons representing
+#' buffers around the route network in `rnet_x`.
+#' The examples below demonstrate how to join attributes from
+#' a route network object created with the function [overline()] onto
+#' OSM geometries.
+#'
+#' Note: The main purpose of this function is to join an ID from `rnet_x`
+#' onto `rnet_y`. Subsequent steps, e.g. with [dplyr::inner_join()]
+#' are needed to join the attributes back onto `rnet_x`.
+#' There are rarely 1-to-1 relationships between spatial network geometries
+#' so we take care when using this function.
+#'
+#' See [#505](https://github.com/ropensci/stplanr/issues/505) for details
+#' and a link to an interactive example of inputs and outputs shown below.
+#'
+#' @param rnet_x Target route network, the output will have the same geometries
+#' as features in this object.
+#' @param rnet_y Source route network. Columns from this route network object will
+#' be copied across to the new network.
+#' @param dist The buffer width around rnet_y in meters. 1 m by default.
+#' @param length_y Add a new column called `length_y`? Useful when joining based on
+#' length of segments (e.g. weighted mean). `TRUE` by default.
+#' @param key_column The index of the key (unique identifier) column in `rnet_x`.
+#' @param subset_x Subset the source route network by the target network before
+#' creating buffers? This can lead to faster and better results. Default:
+#' `TRUE`.
+#' @param dist_subset The buffer distance in m to apply when breaking up the
+#' source object `rnet_y`. Default: 5.
+#' @param split_y Should the second route network be split at the start and
+#' end points of LINESTRING features in the first? `TRUE` by default.
+#' @param ... Additional arguments passed to `rnet_subset`.
+#' @examples
+#' library(sf)
+#' library(dplyr)
+#' # Uncomment for interactive examples:
+#' plot(route_network_small["flow"])
+#' plot(osm_net_example$geometry, lwd = 5, col = "grey")
+#' plot(route_network_small["flow"], add = TRUE)
+#' rnetj = rnet_join(osm_net_example, route_network_small, dist = 9)
+#' # library(mapview)
+#' # mapview(rnetj, zcol = "flow") +
+#' # mapview(route_network_small, zcol = "flow")
+#' plot(rnetj["flow"])
+#' plot(route_network_small["flow"], add = TRUE)
+#' rnetj_summary = rnetj %>%
+#' sf::st_drop_geometry() %>%
+#' group_by(osm_id) %>%
+#' summarise(
+#' flow = weighted.mean(flow, length_y, na.rm = TRUE),
+#' )
+#' osm_joined_rnet = left_join(osm_net_example, rnetj_summary)
+#' plot(route_network_small["flow"])
+#' plot(osm_joined_rnet[c("flow")])
+#' # Improve fit between geometries and performance by subsetting rnet_x
+#' osm_subset = rnet_subset(osm_net_example, route_network_small, dist = 5)
+#' osm_joined_rnet = left_join(osm_subset, rnetj_summary)
+#' plot(route_network_small["flow"])
+#' plot(osm_joined_rnet[c("flow")])
+#' # mapview(joined_network) +
+#' # mapview(route_network_small)
+#' @export
+rnet_join = function(rnet_x, rnet_y, dist = 5, length_y = TRUE, key_column = 1,
+ subset_x = TRUE, dist_subset = 5, split_y = TRUE, ...) {
+ if (subset_x) {
+ rnet_x = rnet_subset(rnet_x, rnet_y, dist = dist_subset, ...)
+ }
+ rnet_x_buffer = geo_buffer(rnet_x, dist = dist, nQuadSegs = 2)
+ if (split_y) {
+ rnet_y = rnet_split_lines(rnet_y, rnet_x, dist = dist_subset)
+ }
+ if (length_y) {
+ rnet_y$length_y = as.numeric(sf::st_length(rnet_y))
+ }
+ rnetj = sf::st_join(rnet_x_buffer[key_column], rnet_y, join = sf::st_contains)
+ rnetj
+}
+
+#' Subset one route network based on overlaps with another
+#'
+#' @param rnet_x The route network to be subset
+#' @param rnet_y The subsetting route network
+#' @param dist The buffer width around y in meters. 1 m by default.
+#' @param crop Crop `rnet_x`? `TRUE` is the default
+#' @param min_x Segments shorter than this multiple of dist
+#' *and* which were longer
+#' before the cropping process will be removed. 3 by default.
+#' @export
+rnet_subset = function(rnet_x, rnet_y, dist = 1, crop = TRUE, min_x = 3) {
+ rnet_x$length_x_original = as.numeric(sf::st_length(rnet_x))
+ rnet_y_union = sf::st_union(rnet_y)
+ rnet_y_buffer = stplanr::geo_buffer(rnet_y_union, dist = dist, nQuadSegs = 2)
+ if(crop) {
+ rnet_x = sf::st_intersection(rnet_x, rnet_y_buffer)
+ rnet_x = line_cast(rnet_x)
+ rnet_x$length_x_cropped = as.numeric(sf::st_length(rnet_x))
+ min_length = dist * min_x
+ sel_short = rnet_x$length_x_cropped < min_length &
+ rnet_x$length_x_original > min_length
+ rnet_x = rnet_x[!sel_short, ]
+ } else {
+ rnet_x[rnet_y_buffer, , op = sf::st_within]
+ }
+ rnet_x
+}
+#' Split lines in a route network based points
+#'
+#' If the object passed to the second argument has LINSTRING geometries
+#' the start and end points of linestrings are used.
+#'
+#' @param rnet_x The route network to be broken into smaller pieces
+#' @param geo_y The geographic object used to break up the route network
+#' @param dist The width of the buffer used when breaking up the route network.
+#' For imprecise data it may be worth increasing this above 1 m, the default.
+#' @export
+rnet_split_lines = function(rnet_x, geo_y, dist = 1) {
+ if (all(grepl(pattern = "LINE", x = sf::st_geometry_type(rnet_x)))) {
+ geo_y = c(
+ lwgeom::st_startpoint(geo_y),
+ lwgeom::st_endpoint(geo_y)
+ )
+ }
+ # speed-up subsequent steps:
+ points = sf::st_union(geo_y)
+ points_buffer = stplanr::geo_buffer(points, dist = dist)
+ rnet_split = sf::st_difference(rnet_x, points_buffer)
+ rnet_split_lines = line_cast(rnet_split)
+ rnet_split_lines$length_osm_cast = as.numeric(sf::st_length(rnet_split_lines))
+ # rnet_split_lines[rnet_split_lines$length_osm_cast > min_lenth, ]
+ rnet_split_lines
+}
+
+#' Convert multilinestring object into linestrings
+#'
+#' Without losing vertices
+#'
+#' @param x Linestring object
+#' @export
+line_cast = function(x) {
+ sf::st_cast(sf::st_cast(x, "MULTILINESTRING"), "LINESTRING")
+}
diff --git a/_pkgdown.yml b/_pkgdown.yml
index 9902bbde..45b28760 100644
--- a/_pkgdown.yml
+++ b/_pkgdown.yml
@@ -12,6 +12,7 @@ reference:
- title: Work with (desire) lines
contents:
- has_concept("lines")
+ - starts_with("line")
- title: Work with and analyse routes
contents:
- has_concept("route_funs")
diff --git a/data-raw/route_network_small.R b/data-raw/route_network_small.R
new file mode 100644
index 00000000..c5e7b0fe
--- /dev/null
+++ b/data-raw/route_network_small.R
@@ -0,0 +1,25 @@
+## code to prepare `route_network_small` dataset goes here
+
+# Create route network focussed on OSM data
+library(tidyverse)
+osm_vertices = sf::st_cast(osm_net_example, to = "POINT")
+plot(osm_vertices$geometry)
+set.seed(2022)
+osm_vertices_random = osm_vertices %>%
+ sample_n(size = 9)
+
+desire_lines = od::points_to_odl(p = osm_vertices_random)
+plot(desire_lines)
+desire_lines$length = sf::st_length(desire_lines) %>% as.numeric()
+summary(desire_lines$length)
+desire_lines_long = desire_lines %>%
+ filter(length > 100)
+
+routes = route(l = desire_lines_long, route_fun = stplanr::route_osrm)
+routes$flow = seq(nrow(routes))
+route_network_small = overline(routes, attrib = "flow")
+plot(osm_net_example$geometry, lwd = 5, col = "grey")
+route_network_small %>%
+ select(flow) %>%
+ plot(add = TRUE)
+usethis::use_data(route_network_small, overwrite = TRUE)
diff --git a/data/osm_net_example.rda b/data/osm_net_example.rda
index c3b63d4d..e3d01652 100644
Binary files a/data/osm_net_example.rda and b/data/osm_net_example.rda differ
diff --git a/data/route_network_small.rda b/data/route_network_small.rda
new file mode 100644
index 00000000..4b3f6c09
Binary files /dev/null and b/data/route_network_small.rda differ
diff --git a/docs/CONDUCT.html b/docs/CONDUCT.html
index 2f90a1a2..95f45336 100644
--- a/docs/CONDUCT.html
+++ b/docs/CONDUCT.html
@@ -1,145 +1,60 @@
-
-
-
Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
Visualisation is an important aspect of any transport study, as it enables researchers to communicate their findings to other researchers, policy-makers and, ultimately, the public. It may therefore come as a surprise that stplanr contains no functions for visualisation. Instead, users are encouraged to make use of existing spatial visualisation tools in R, such as tmap, leaflet and ggmap .
-
Furthermore, with the development of online application frameworks such as shiny, it is now easier than ever to make the results of transport analysis and modelling projects available to the public. An example is the online interface of the Propensity to Cycle Tool (PCT). The results of the project, generated using stplanr, are presented at zone, desire line and Route Network levels . There is great potential to expand on the principle of publicly accessible transport planning tools via ‘web apps,’ perhaps through new R packages dedicated to visualising transport data.
-
-
-
-
-Future directions of travel
-
This paper has demonstrated the great potential for R to be used for transport planning. R’s flexibility, powerful GIS capabilities and free accessibility makes it well-suited to the needs of transport planners and researchers, especially those wanting to avoid the high costs of market-leading products. Rather than ‘reinvent the wheel’ (e.g. with a new class system), stplanr builds on existing packages and classes to work with common transport data formats.
-
It is useful to see stplanr, and R for transport planning in general, as an addition tool in the transport planner’s cabinet. It can be understood as one part of a wider movement that is making transport planning a more open and democratic process. Other developments in this movement include the increasing availability of open data and the rise of open source products for transport modelling, such as SUMO, MATSim and MITSIMLAB . stplanr, with its focus on GIS operations rather than microscopic vehicle-level behaviour, can complement such software and help make better use of new open data sources.
-
Because transport planning is an inherently spatial activity, stplanr occupies an important niche in the transport planning software landscape, with its focus on spatial transport data. There is great potential for development of stplanr in many directions. Desirable developments include the additional of functions for modelling modal split, for examample with functions to create commonly distance decay curves which are commonly found in active travel research and improving the computational efficiency of existing functions to make the methods more scalable for large databases. Our priority for stplanr however, is to keep the focus on geographic functions for transport planning. There are many opportunities in this direction, including:
+lm1<-lm(pwalk~d_euclidean, data =l@data, weights =All)
+lm2<-lm(pwalk~d_rf, data =l@data, weights =All)
+lm3<-glm(pwalk~d_rf+I(d_rf^0.5),
+ data =l@data, weights =All, family =quasipoisson(link ="log")
+)
+
The results of these regression models can be seen using
+summary(). Surprisingly, Euclidean distance was a better
+predictor of walking than route distance, but no strong conclusions can
+be drawn from this finding, with such a small sample of desire lines (n
+= 42). The results are purely illustrative, of the kind of the
+possibilities created by using stplanr in conjuction
+with R’s modelling capabilities (see Figure ).
+
+plot(l$d_euclidean, l$pwalk,
+ cex =l$All/50,
+ xlab ="Euclidean distance (m)", ylab ="Proportion of trips by foot"
+)
+l2<-data.frame(d_euclidean =1:5000, d_rf =1:5000)
+lm1p<-predict(lm1, l2)
+lm2p<-predict(lm2, l2)
+lm3p<-predict(lm3, l2)
+lines(l2$d_euclidean, lm1p)
+lines(l2$d_euclidean, exp(lm2p), col ="green")
+lines(l2$d_euclidean, exp(lm3p), col ="red")
+
+
+
Visualisation
+
+
Visualisation is an important aspect of any transport study, as it
+enables researchers to communicate their findings to other researchers,
+policy-makers and, ultimately, the public. It may therefore come as a
+surprise that stplanr contains no functions for
+visualisation. Instead, users are encouraged to make use of existing
+spatial visualisation tools in R, such as tmap,
+leaflet and ggmap .
+
Furthermore, with the development of online application frameworks
+such as shiny, it is now easier than ever to make the
+results of transport analysis and modelling projects available to the
+public. An example is the online interface of the Propensity to Cycle
+Tool (PCT). The results of the project, generated using
+stplanr, are presented at zone, desire line and Route
+Network levels . There is great potential to expand on the principle of
+publicly accessible transport planning tools via ‘web apps’, perhaps
+through new R packages dedicated to visualising transport data.
+
+
+
+
Future directions of travel
+
+
This paper has demonstrated the great potential for R to be used for
+transport planning. R’s flexibility, powerful GIS capabilities and free
+accessibility makes it well-suited to the needs of transport planners
+and researchers, especially those wanting to avoid the high costs of
+market-leading products. Rather than ‘reinvent the wheel’ (e.g. with a
+new class system), stplanr builds on existing packages
+and classes to work with common transport data formats.
+
It is useful to see stplanr, and R for transport
+planning in general, as an addition tool in the transport planner’s
+cabinet. It can be understood as one part of a wider movement that is
+making transport planning a more open and democratic process. Other
+developments in this movement include the increasing availability of
+open data and the rise of open source products for transport modelling,
+such as SUMO,
+MATSim and MITSIMLAB .
+stplanr, with its focus on GIS operations rather than
+microscopic vehicle-level behaviour, can complement such software and
+help make better use of new open data sources.
+
Because transport planning is an inherently spatial activity,
+stplanr occupies an important niche in the transport
+planning software landscape, with its focus on spatial transport data.
+There is great potential for development of stplanr in
+many directions. Desirable developments include the additional of
+functions for modelling modal split, for examample with functions to
+create commonly distance decay curves which are commonly found in active
+travel research and improving the computational efficiency of existing
+functions to make the methods more scalable for large databases. Our
+priority for stplanr however, is to keep the focus on
+geographic functions for transport planning. There are many
+opportunities in this direction, including:
-
Functions to assess the environment surrounding routes, e.g. via integration with the in-development osmdata package.
-
Functions to match different GIS routes, perhaps building on the Hausdorf distance algorithm implemented in the function gDistance.
-
Additional functions for route-allocation of travel, e.g. via an interface to the OpenTripPlanner API.
-
Functions for aggregating very large GPS trace datasets (e.g. into raster cells) for anonymisation and analysis/visualisation purposes.
-
The creation of a class system for spatial transport datasets, such as to represent spatial route and a route networks (perhaps with classes named and ). This is not a short-term priority and it would be beneficial to coincide such developments to a migration to for spatial classes.
+
Functions to assess the environment surrounding routes, e.g. via
+integration with the in-development osmdata
+package.
+
Functions to match different GIS routes, perhaps building on the
+Hausdorf distance algorithm implemented in the function
+gDistance.
+
Additional functions for route-allocation of travel, e.g. via an
+interface to the OpenTripPlanner API.
+
Functions for aggregating very large GPS trace datasets (e.g. into
+raster cells) for anonymisation and analysis/visualisation
+purposes.
+
The creation of a class system for spatial transport datasets, such
+as to represent spatial route and a route networks (perhaps with classes
+named and ). This is not a short-term priority and it would be
+beneficial to coincide such developments to a migration to for spatial
+classes.
-
Such spatial data processing capabilities would increase the range of transport planning tasks that stplanr can facilitate. For all this planned development activity to be useful, it is vital that new functionality is intuitive. R has a famously steep learning curve. Implementing simple concepts such as consistent naming systems and ensuring ‘type stability’ can greatly improve the usability of the package. For this reason, much future work in stplanr will go into improving documentation and user-friendliness.
-
Like much open source software stplanr is an open-ended project, a work-in-progress. We have set out clear motivations for developing transport planning capabilities in R and believe that the current version of stplanr (0.1.6) provides a major step in that direction compared with what was available a couple of years ago. But there is much more to do. We therefore welcome input on where the package’s priorities should lie, how it should evolve in the future and how to ensure it is well-developed and sustained.
+
Such spatial data processing capabilities would increase the range of
+transport planning tasks that stplanr can facilitate.
+For all this planned development activity to be useful, it is vital that
+new functionality is intuitive. R has a famously steep learning curve.
+Implementing simple concepts such as consistent naming systems and
+ensuring ‘type stability’ can greatly improve the usability of the
+package. For this reason, much future work in stplanr
+will go into improving documentation and user-friendliness.
+
Like much open source software stplanr is an
+open-ended project, a work-in-progress. We have set out clear
+motivations for developing transport planning capabilities in R and
+believe that the current version of stplanr (0.1.6)
+provides a major step in that direction compared with what was available
+a couple of years ago. But there is much more to do. We therefore
+welcome input on where the package’s priorities should lie, how it
+should evolve in the future and how to ensure it is well-developed and
+sustained.
-Bivand, Roger S, Edzer J Pebesma, and Virgilio G’omez-Rubio. 2013. Applied Spatial Data Analysis with R. Vol. 747248717. Springer.
+Bivand, Roger S, Edzer J Pebesma, and Virgilio G’omez-Rubio. 2013.
+Applied Spatial Data Analysis with R. Vol.
+747248717. Springer.
-Boyce, David E., and Huw C. W. L. Williams. 2015. Forecasting UrbanTravel: Past, Present and Future. Edward Elgar Publishing.
+Boyce, David E., and Huw C. W. L. Williams. 2015. Forecasting
+UrbanTravel: Past,
+Present and Future. Edward Elgar
+Publishing.
-Brown, Patrick E. 2016. “Maps, Coordinate Reference Systems and Visualising Geographic Data with Mapmisc.”The R Journal 8 (1): 64–91.
+Brown, Patrick E. 2016. “Maps, Coordinate Reference
+Systems and Visualising Geographic Data with
+Mapmisc.”The R Journal 8 (1): 64–91.
-Calenge, C. 2006. “The Package Adehabitat for the R Software: Tool for the Analysis of Space and Habitat Use by Animals.”Ecological Modelling 197: 1035.
+Calenge, C. 2006. “The Package Adehabitat for the R
+Software: Tool for the Analysis of Space and Habitat Use by
+Animals.”Ecological Modelling 197: 1035.
-Cerin, Ester, Cindy H P Sit, Anthony Barnett, Man Chin Cheung, and Wai Man Chan. 2013. “Walking for Recreation and Perceptions of the Neighborhood Environment in Older Chinese Urban Dwellers.”Journal of Urban Health 90 (1): 56–66. https://doi.org/10.1007/s11524-012-9704-8.
+Cerin, Ester, Cindy H P Sit, Anthony Barnett, Man Chin Cheung, and Wai
+Man Chan. 2013. “Walking for Recreation and Perceptions of the
+Neighborhood Environment in Older Chinese Urban
+Dwellers.”Journal of Urban Health 90 (1): 56–66. https://doi.org/10.1007/s11524-012-9704-8.
-de Dios Ortuzar, Juan, and Luis G. Willumsen. 2011. Modelling Transport. John Wiley & Sons.
+de Dios Ortuzar, Juan, and Luis G. Willumsen. 2011. Modelling
+Transport. John Wiley & Sons.
-Diana, Marco. 2012. “Studying Patterns of Use of TransportModesThroughDataMining.”Transportation Research Record: Journal of the Transportation Research Board 2308 (December): 1–9. https://doi.org/10.3141/2308-01.
+Diana, Marco. 2012. “Studying Patterns of
+Use of TransportModes
+ThroughDataMining.”
+Transportation Research Record: Journal of the Transportation
+Research Board 2308 (December): 1–9. https://doi.org/10.3141/2308-01.
-Efthymiou, Dimitrios, and Constantinos Antoniou. 2012. “Use of SocialMedia for TransportDataCollection.”Procedia - Social and Behavioral Sciences 48 (August 2016): 775–85. https://doi.org/10.1016/j.sbspro.2012.06.1055.
+Efthymiou, Dimitrios, and Constantinos Antoniou. 2012. “Use of
+SocialMedia for Transport
+DataCollection.”Procedia - Social
+and Behavioral Sciences 48 (August 2016): 775–85. https://doi.org/10.1016/j.sbspro.2012.06.1055.
-Hollander, Yaron. 2016. Transport Modelling for a Complete Beginner. CTthink!
+Hollander, Yaron. 2016. Transport Modelling for a
+Complete Beginner. CTthink!
-Jalal, Hawre, Petros Pechlivanoglou, Eline Krijkamp, Fernando Alarid-Escudero, Eva Enns, and M. G. Myriam Hunink. 2017. “An Overview of R in Health Decision Sciences.”Medical Decision Making, January, 0272989X16686559. https://doi.org/10.1177/0272989X16686559.
+Jalal, Hawre, Petros Pechlivanoglou, Eline Krijkamp, Fernando
+Alarid-Escudero, Eva Enns, and M. G. Myriam Hunink. 2017. “An
+Overview of R in Health Decision
+Sciences.”Medical Decision Making, January,
+0272989X16686559.
-Lovelace, Robin, and Richard Ellison. 2018. “Stplanr: A Package for Transport Planning.”The R Journal 10 (2): 7–23. https://doi.org/10.32614/RJ-2018-053.
+Lovelace, Robin, and Richard Ellison. 2018. “Stplanr: A
+Package for Transport Planning.”The R
+Journal 10 (2): 7–23. https://doi.org/10.32614/RJ-2018-053.
-Lovelace, Robin, Anna Goodman, Rachel Aldred, Nikolai Berkoff, Ali Abbas, and James Woodcock. 2017. “The Propensity to CycleTool: An Open Source Online System for Sustainable Transport Planning.”Journal of Transport and Land Use 10 (1). https://doi.org/10.5198/jtlu.2016.862.
+Lovelace, Robin, Anna Goodman, Rachel Aldred, Nikolai Berkoff, Ali
+Abbas, and James Woodcock. 2017. “The Propensity to
+CycleTool: An Open Source Online
+System for Sustainable Transport Planning.”Journal of
+Transport and Land Use 10 (1). https://doi.org/10.5198/jtlu.2016.862.
-Moore, R. D. (Dan), and David Hutchinson. 2017. “Why Watershed Analysts Should Use R for Data Processing and Analysis.”Confluence: Journal of Watershed Science and Management 1 (1). http://confluence-jwsm.ca/index.php/jwsm/article/view/2.
+Moore, R. D. (Dan), and David Hutchinson. 2017. “Why
+Watershed Analysts Should Use R for Data
+Processing and Analysis.”Confluence:
+Journal of Watershed Science and Management 1 (1). http://confluence-jwsm.ca/index.php/jwsm/article/view/2.
-Waddell, Paul. 2002. “UrbanSim: Modeling Urban Development for Land Use, Transportation, and Environmental Planning.”Journal of the American Planning Association 68 (3): 297–314.
+Waddell, Paul. 2002. “UrbanSim: Modeling
+Urban Development for Land Use, Transportation, and Environmental
+Planning.”Journal of the American Planning Association
+68 (3): 297–314.
-Zheng, Xinhu, Wei Chen, Pu Wang, Dayong Shen, Songhang Chen, Xiao Wang, Qingpeng Zhang, and Liuqing Yang. 2016. “Big Data for Social Transportation.”IEEE Transactions on Intelligent Transportation Systems 17 (3): 620–30. https://ieeexplore.ieee.org/abstract/document/7359138/.
-
-
+Zheng, Xinhu, Wei Chen, Pu Wang, Dayong Shen, Songhang Chen, Xiao Wang,
+Qingpeng Zhang, and Liuqing Yang. 2016. “Big Data for Social
+Transportation.”IEEE Transactions on Intelligent
+Transportation Systems 17 (3): 620–30. https://ieeexplore.ieee.org/abstract/document/7359138/.
-
-
-
-
Many people can think of things that could be improved on their local transport networks, especially for walking, cycling and wheel-chairs. But most lack the evidence to communicate the issues, and potential solutions, to others.↩︎
-
An API key is needed for this function to work. This can be requested (or purchased for large scale routing) from cyclestreets.net/api/apply. See ?route_cyclestreet for details. Thanks to Martin Lucas-Smith and Simon Nuttall for making this possible.↩︎