-
Notifications
You must be signed in to change notification settings - Fork 1
/
README-10-cities.Rmd
289 lines (209 loc) · 11.5 KB
/
README-10-cities.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
---
title: Data analysis to support temporary cycleways
output:
# html_document:
github_document:
toc: true
toc_depth: 2
# uncomment the next line if no phantomjs
# always_allow_html: no
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
message = FALSE,
warning = FALSE,
echo = FALSE,
collapse = TRUE,
comment = "#>"
)
library(pct)
library(sf)
library(tidyverse)
library(tmap)
tmap_mode("view")
piggyback::pb_download("las_top.Rds")
pct_las = sf::read_sf("https://github.com/cyipt/popupCycleways/releases/download/0.1/pct_la_summaries.geojson")
las_top = sf::read_sf("https://github.com/cyipt/popupCycleways/releases/download/0.1/las_top.geojson")
# las_top = readRDS("las_top.Rds")
# las_top = st_make_valid(las_top)
# sf::write_sf(las_top, "las_top.geojson")
# piggyback::pb_upload("las_top.geojson")
piggyback::pb_download("rsf_grouped_long.Rds")
rsf = readRDS("rsf_grouped_long.Rds")
piggyback::pb_download("Builtup_Areas_December_2011_Boundaries_V2.geojson")
# could use in subsequent analysis - removes part of Liverpool tunnel?
# builtup = sf::read_sf("Builtup_Areas_December_2011_Boundaries_V2.geojson") %>% sf::st_transform(27700)
## Mask not required for London, so no need to slow down the code unnecessarily
s = c(
"Esri.WorldGrayCanvas",
"https://b.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",
"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'"
)
```
```{r, eval=FALSE}
old_wd = setwd("cities")
rmarkdown::render("sheffield.Rmd") # check
rmarkdown_files = paste0(tolower(las_top$name), ".Rmd")
for(i in rmarkdown_files) {
rmarkdown::render(i)
}
# lapply(rmarkdown_files, rmarkdown::render)
# parallel::mclapply(rmarkdown_files, rmarkdown::render, mc.cores = 5)
getwd()
browseURL("liverpool.html")
setwd(old_wd)
webshot::install_phantomjs()
# general analysis of data
# piggyback::pb_upload("rsf.Rds", "cyipt/cyipt-phase-1-data")
# piggyback::pb_download("rsf.Rds", "cyipt/cyipt-phase-1-data")
rsf = readRDS("rsf.Rds")
names(rsf)
rtid = readr::read_csv("~/cyipt/cyipt-server-data/malcolm/roadtypes.csv")
readr::write_csv(rtid, "rtid.csv")
piggyback::pb_upload("rtid.csv")
rsf = left_join(rsf, rtid)
rsf_spare_lane = rsf %>% filter(
(lanespsvforward + lanesforward) > 1 |
(lanespsvbackward + lanesbackward) > 1,
!grepl(pattern = "motorway", highway)
)
saveRDS(rsf_spare_lane, "rsf_spare_line.Rds")
# piggyback::pb_upload("rsf_spare_line.Rds", "cyipt/cyipt-phase-1-data")
rsf = readRDS("rsf_spare_line.Rds")
summary(rsf$length)
unique(rsf$region)
head(rsf$name)
rsf %>%
select(calcwidthnow) %>%
sf::st_drop_geometry() %>%
group_by(calcwidthnow) %>%
summarise(n = n()) %>%
filter(n > 500)
wide_potential1 = rsf %>% filter(width > 10, pct.dutch > 100)
wide_potential2 = rsf %>% filter(
(lanespsvforward + lanesforward) > 1 |
(lanespsvbackward + lanesbackward) > 1,
pctdutch > 50)
# mapview::mapview(wide_potential2) # very patchy
rsf_grouped = rsf %>%
group_by(name, ref, highway, region) %>%
summarise(pctgov = mean(pctgov)) %>%
ungroup()
rsf_grouped$length = sf::st_length(rsf_grouped) %>% as.numeric()
summary(rsf_grouped$length)
rsf_grouped_long = rsf_grouped %>% filter(length > 100)
# mapview::mapview(rsf_grouped_long)
rsf_grouped_long %>%
st_drop_geometry() %>%
arrange(desc(pctgov)) %>%
group_by(region) %>%
slice(1:10)
tm_shape(rsf_grouped_long) + tm_lines("pctgov", lwd = 3, palette = "viridis")
saveRDS(rsf_grouped_long, "rsf_grouped_long.Rds")
piggyback::pb_upload("rsf_grouped_long.Rds")
```
# Introduction
<!-- badges: start -->
<!-- badges: end -->
The goal of this project is to flag roads on which there is
- high cycling potential
- road space that could be re-allocated
in the context of increased demand for cycling to key worker workplaces.
See this [pre-print paper](https://osf.io/7wjb6) for a generalised summary of the methods. This document describes the work in the context of UK planning priorities.
It is based on an analysis of data generated for Department for Transport funded projects the Propensity to Cycle Tool (PCT) and the Cycling Infrastructure Prioritisation Toolkit (CyIPT).
As an initial analysis, to elicit feedback on the methods and preliminary results, we have focused on a sample of major cities. We hope this can be further developed and expanded in due course to provide nationwide coverage.
We chose the top 5 cities in terms of absolute long-term cycling potential (London, Birmingham, Manchester, Leeds, Liverpool) plus an additional 5 cities that have active advocacy groups (Newcastle, Sheffield, Cambridge, Bristol, Leicester).
Estimates of current and potential numbers of commuters who could cycle to work in these cities are presented in the table below.
<!-- We did this by analysing data from the PCT project and selecting the top 10 cities in terms of long term cycling potential, plus Sheffield and Cambridge, : -->
```{r cities}
las_top %>%
select(name, all, bicycle, dutch_slc) %>%
sf::st_drop_geometry() %>%
knitr::kable(caption = "Selection of 10 cities in England with high cycling potential or active adovcacy groups. 'All' represents all commuters in the 2011 Census, 'bicycle' represents the number who cycled to work and 'dutch_slc' the number who could cycle to work under a 'Go Dutch' scenario of cycling uptake.")
```
The geographic distribution of these cities is shown in the map below:
```{r}
tm_shape(las_top) +
tm_polygons("blue")
```
These cities represent around 1/4 of the population of England.
Welsh and Scottish cities with high cycling potential such as Cardiff and Edinburgh were not included in the analysis because the CyIPT does not currently have data outside of England, although we could extend the methods to cover all UK cities at some point.
# Method
To identify streets that may be strong candidates for the provision of temporary or 'pop-up' cycleways, building on data from the CyIPT and PCT projects, three filtering methods were used:
- Number of lanes: roads with more than 1 lane in either direction were identified
- Cycling potential: only roads with high cycling potential, of 100 or more in the long-term Government Target scenario, were selected
- Length of road: only road sections at least 100m long were included in the analysis
From the resulting selections we then identified the 'top 10' routes in each city based on cycling potential. In most cities, only road sections longer than a threshold of 200-300m were considered for entry to this 'top 10' list.
More criteria such as road width and proximity to key services such as hospitals could be added at a later date.
A final stage involved manually removing road sections such as roads on which there is already good quality dedicated infrastructure and roundabouts. This final stage could be automated in future work.
The cycling potential of the top 10 streets is calculated based on the 'Government Target' scenario in the Propensity to Cycle Tool, which represents a doubling in cycling compared with 2011 levels.
London is close to meeting this target already.
# Interpreting the results
The results are not a definitive list of places where pop-up cycleways should be prioritised but a 'starter for 10' highlighting roads that may be good candidates for 'pop-up' active transport infrastructure.
There are many types of pop-up infrastructure, but focus of this project is through reallocation lanes of traffic, as planned for [Park Lane and other wide roads in London](https://www.forbes.com/sites/carltonreid/2020/05/06/pop-up-cycleway-for-park-lane-as-tenfold-increase-in-cycling-predicted-for-london/#48aad0705b1e).
<!-- It seems this scheme is not in operation yet from https://www.tfljamcams.net/ -->
The results highlight roads that have cycling potential and at least one spare lane, meaning a 2 lanes in one direction.
There will be many road sections that would benefit from interventions not shown in the maps below: roads with only one lane in each direction could be made oneway temporarily, creating a spare lane for cycleways or extra pavement width.
Preventing through-flow in residential areas, as is happening in [Lewisham](https://853.london/2020/05/05/lewisham-council-asks-which-streets-it-should-open-up-to-walkers-and-cyclists/) and [Salford City Council](https://salfordliveablestreets.commonplace.is/) is another option that can complement road reallocation.
<!-- We filtered-out roads with low levels of cycling potential and focus only on roads that have at least one 'spare lane', defined as having more than 1 lane in either direction. -->
<!-- Such roads that could be converted into 'liveable streets' by preventing through traffic have not been considered at this stage. -->
Evidence supporting other types of interventions, for example where there is high demand for access to key workplaces but little space for walking and cycling, could be an aim of future work.
## What the maps show
The results below show all roads with a 'spare lane' in **light blue** based on the three criteria listed above (lanes, potential and length).
The top 10 roads in terms of cycling potential are shown in **dark blue**.
Cycling potential refers to the number of commuters who would cycle along the road (either to or from work) under the Government Target based on data from the Department for Transport funded Propensity to Cycle Tool (see [www.pct.bike](https://www.pct.bike/)).
```{r, child="cities/london.Rmd"}
```
See [london.html](https://cyipt.github.io/popupCycleways/london.html) for the interactive version of the map above.
```{r, child="cities/birmingham.Rmd"}
```
See [birmingham.html](https://cyipt.github.io/popupCycleways/birmingham.html) for the interactive version of the map above.
```{r, child="cities/manchester.Rmd"}
```
See [manchester.html](https://cyipt.github.io/popupCycleways/manchester.html) for the interactive version of the map above.
```{r, child="cities/leeds.Rmd"}
```
See [leeds.html](https://cyipt.github.io/popupCycleways/leeds.html) for the interactive version of the map above.
```{r, child="cities/liverpool.Rmd"}
```
See [liverpool.html](https://cyipt.github.io/popupCycleways/liverpool.html) for the interactive version of the map above.
```{r, child="cities/bristol.Rmd"}
```
See [bristol.html](https://cyipt.github.io/popupCycleways/bristol.html) for the interactive version of the map above.
```{r, child="cities/leicester.Rmd"}
```
See [leicester.html](https://cyipt.github.io/popupCycleways/leicester.html) for the interactive version of the map above.
```{r, child="cities/sheffield.Rmd"}
```
See [sheffield.html](https://cyipt.github.io/popupCycleways/sheffield.html) for the interactive version of the map above.
```{r, child="cities/newcastle.Rmd"}
```
See [newcastle.html](https://cyipt.github.io/popupCycleways/newcastle.html) for the interactive version of the map above.
```{r, child="cities/cambridge.Rmd"}
```
See [cambridge.html](https://cyipt.github.io/popupCycleways/cambridge.html) for the interactive version of the map above.
```{r, engine='zsh', eval=FALSE}
# deploy
git clone [email protected]:cyipt/popupCycleways
cd popupCycleways
git checkout gh-pages
# git rm -rf .
# git commit --allow-empty -m 'Initial gh-pages commit'
# git push origin gh-pages
# git checkout master
# cp -Rv ../README* . # it's 100 MB!
git status
cp -Rv ../cities/*.html . # it's 100 MB!
git status
ls -hal
# firefox index.html
git status
git commit -am 'Update results'
git push origin gh-pages
cd ..
```
<!-- # Reproducing the results -->
<!-- To reproduce the results for a particular city you should -->
<!-- ```{r} -->
<!-- ``` -->