-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update scenarios code - reproducibility #43
Conversation
Heads-up @joeytalbot after the first commit in this PR the script is reproducible, as shown in the mega reprex below - there were a few issues preventing reproducibility before but it's now mostly sorted. Note: piggyback doesn't work will with folders, hence assuming data in the releases lives in the root directory in previous projects. Suggest we do that but haven't implemented it. # Aim: generate scenarios of change associated with new developments
library(tidyverse)
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 7.0.0
library(stplanr)
# set-up and parameters ---------------------------------------------------
setwd("~/cyipt/actdev")
household_size = 2.3 # mean UK household size at 2011 census
max_length = 20000 # maximum length of desire lines in m
site_name = "great-kneighton" # which site to look at (can change)
min_flow_routes = 10 # threshold above which OD pairs are included
region_buffer_dist = 2000
large_area_buffer = 500
smart.round = function(x) {
y = floor(x)
indices = utils::tail(order(x-y), round(sum(x)) - sum(y))
y[indices] = y[indices] + 1
y
}
# generic input data --------------------------------------------------------------
centroids_msoa = pct::get_centroids_ew()
#>
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#> MSOA11CD = col_character(),
#> MSOA11NM = col_character(),
#> BNGEAST = col_double(),
#> BNGNORTH = col_double(),
#> LONGITUDE = col_double(),
#> LATITUDE = col_double()
#> )
centroids_msoa = sf::st_transform(centroids_msoa, 4326)
zones_msoa_national = pct::get_pct(national = TRUE, geography = "msoa", layer = "z")
#> Warning in CPL_crs_from_input(x): GDAL Message 1: +init=epsg:XXXX syntax is
#> deprecated. It might return a CRS with a non-EPSG compliant axis order.
sf::st_crs(zones_msoa_national)
#> Coordinate Reference System:
#> User input: +proj=longlat +init=epsg:4326 +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
#> wkt:
#> BOUNDCRS[
#> SOURCECRS[
#> GEOGCRS["unknown",
#> DATUM["World Geodetic System 1984",
#> ELLIPSOID["WGS 84",6378137,298.257223563,
#> LENGTHUNIT["metre",1]],
#> ID["EPSG",6326]],
#> PRIMEM["Greenwich",0,
#> ANGLEUNIT["degree",0.0174532925199433],
#> ID["EPSG",8901]],
#> CS[ellipsoidal,2],
#> AXIS["longitude",east,
#> ORDER[1],
#> ANGLEUNIT["degree",0.0174532925199433,
#> ID["EPSG",9122]]],
#> AXIS["latitude",north,
#> ORDER[2],
#> ANGLEUNIT["degree",0.0174532925199433,
#> ID["EPSG",9122]]]]],
#> TARGETCRS[
#> GEOGCRS["WGS 84",
#> DATUM["World Geodetic System 1984",
#> ELLIPSOID["WGS 84",6378137,298.257223563,
#> LENGTHUNIT["metre",1]]],
#> PRIMEM["Greenwich",0,
#> ANGLEUNIT["degree",0.0174532925199433]],
#> CS[ellipsoidal,2],
#> AXIS["latitude",north,
#> ORDER[1],
#> ANGLEUNIT["degree",0.0174532925199433]],
#> AXIS["longitude",east,
#> ORDER[2],
#> ANGLEUNIT["degree",0.0174532925199433]],
#> ID["EPSG",4326]]],
#> ABRIDGEDTRANSFORMATION["Transformation from unknown to WGS84",
#> METHOD["Geocentric translations (geog2D domain)",
#> ID["EPSG",9603]],
#> PARAMETER["X-axis translation",0,
#> ID["EPSG",8605]],
#> PARAMETER["Y-axis translation",0,
#> ID["EPSG",8606]],
#> PARAMETER["Z-axis translation",0,
#> ID["EPSG",8607]]]]
st_precision(zones_msoa_national) = 1000000
od = pct::get_od()
#> No region provided. Returning national OD data.
#>
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#> `Area of residence` = col_character(),
#> `Area of workplace` = col_character(),
#> `All categories: Method of travel to work` = col_double(),
#> `Work mainly at or from home` = col_double(),
#> `Underground, metro, light rail, tram` = col_double(),
#> Train = col_double(),
#> `Bus, minibus or coach` = col_double(),
#> Taxi = col_double(),
#> `Motorcycle, scooter or moped` = col_double(),
#> `Driving a car or van` = col_double(),
#> `Passenger in a car or van` = col_double(),
#> Bicycle = col_double(),
#> `On foot` = col_double(),
#> `Other method of travel to work` = col_double()
#> )
#>
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#> MSOA11CD = col_character(),
#> MSOA11NM = col_character(),
#> BNGEAST = col_double(),
#> BNGNORTH = col_double(),
#> LONGITUDE = col_double(),
#> LATITUDE = col_double()
#> )
u = "https://github.com/cyipt/actdev/releases/download/0.1.1/all-sites.geojson"
sites = sf::st_read(u)
#> Reading layer `all-sites' from data source `https://github.com/cyipt/actdev/releases/download/0.1.1/all-sites.geojson' using driver `GeoJSON'
#> Simple feature collection with 35 features and 2 fields
#> geometry type: POLYGON
#> dimension: XY
#> bbox: xmin: -3.381729 ymin: 50.70869 xmax: 1.204097 ymax: 55.03688
#> geographic CRS: WGS 84
st_precision(sites) = 1000000
# 2011 MSOA populations
u2 = "https://www.ons.gov.uk/file?uri=%2fpeoplepopulationandcommunity%2fpopulationandmigration%2fpopulationestimates%2fdatasets%2fmiddlesuperoutputareamidyearpopulationestimates%2fmid2011/mid2011msoaunformattedfile.xls"
f = "data/mid2011msoaunformattedfile.xls"
if(!file.exists(f)) {
download.file(u2, f)
}
msoa_pops = readxl::read_xls(path = "data/mid2011msoaunformattedfile.xls", sheet = "Mid-2011 Persons", )
msoa_pops = msoa_pops %>%
select(geo_code1 = Code, msoa_population = "All Ages")
# estimated site populations
site_pops = sites %>%
st_drop_geometry() %>%
mutate(site_population = dwellings_when_complete * household_size)
# jts data - SLOW
all_jts_tables = paste0("jts050", 1:8)
i = all_jts_tables[1]
for(i in all_jts_tables){
year = 2017
f = paste0(i, "-", year, ".geojson")
piggyback::pb_download(f, tag = "0.1.2")
f2 = sf::read_sf(f)
assign(i, f2)
rm(f2)
}
#> ✔ Setting active project to '/mnt/57982e2a-2874-4246-a6fe-115c199bc6bd/cyipt/actdev'
#> All files up-to-date already
#>
#> All files up-to-date already
#>
#> All files up-to-date already
#>
#> All files up-to-date already
#>
#> All files up-to-date already
#>
#> All files up-to-date already
#>
#> All files up-to-date already
#>
#> All files up-to-date already
# Select site of interest -------------------------------------------------
site = sites[sites$site_name == site_name, ]
path = file.path("data-small", site_name)
dir.create(path = path)
#> Warning in dir.create(path = path): 'data-small/great-kneighton' already exists
zones_touching_site = zones_msoa_national[site, , op = sf::st_intersects]
#> although coordinates are longitude/latitude, st_intersects assumes that they are planar
zones_touching_site$overlap_size = units::drop_units(st_area(zones_touching_site))
zones_touching_site = zones_touching_site %>%
filter(overlap_size > 10000) %>%
select(-overlap_size)
# Route from site centroid (rather than MSOA centroid) --------------------
# `disaggregate.R` changes this to route from a random selection of homes within the site, to better represent the accessibility of the site as a whole
site_centroid = site %>%
st_transform(27700) %>%
st_centroid() %>%
st_transform(4326)
#> Warning in st_centroid.sf(.): st_centroid assumes attributes are constant over
#> geometries of x
zone_data = zones_touching_site %>%
st_drop_geometry() %>%
mutate(site_name = site$site_name)
site_c = right_join(site_centroid, zone_data) %>%
select(geo_code, site_name)
#> Joining, by = "site_name"
# Generate desire lines ---------------------------------------------------
od_site = od %>%
filter(geo_code1 %in% zones_touching_site$geo_code) %>%
filter(geo_code2 %in% centroids_msoa$msoa11cd)
# intra-zonal flows are included, with the desire line going from the site centroid to the msoa centroid
# intra-zonal flows could later be represented using more detailed od-workplace zone data.
desire_lines_site = od::od_to_sf(x = od_site, z = site_c, zd = centroids_msoa)
#> 0 origins with no match in zone ids
#> 0 destinations with no match in zone ids
#> points not in od data removed.
desire_lines_site = desire_lines_site %>%
mutate(site_name = site_name)
# Adjust flows to represent site population, not MSOA population(s) -------
# for both MSOAs and development sites, these are entire populations, not commuter populations
desire_lines_site = inner_join(desire_lines_site, msoa_pops)
#> Joining, by = "geo_code1"
desire_lines_site = inner_join(desire_lines_site, site_pops)
#> Joining, by = "site_name"
site_population = unique(desire_lines_site$site_population)
unique_msoa_pops = desire_lines_site %>%
st_drop_geometry() %>%
select(geo_code1, msoa_population) %>%
unique()
sum_msoa_pops = sum(unique_msoa_pops$msoa_population)
desire_lines_site = desire_lines_site %>%
mutate(sum_msoa_pops = sum_msoa_pops)
# keeping converted flows in the original columns
desire_lines_pops = desire_lines_site %>%
mutate(across(all:other, .fns = ~ ./ sum_msoa_pops * site_population))
# todo: add empirical data on 'new homes' effect (residents of new homes are more likely to drive than residents of older homes)
# could also adjust the base walking and cycling mode shares in response to the difference between journey distance from the site centroid as compared to journey distance from the MSOA centroid (eg in Cambridge, the MSOA centroid is a fair bit closer to the city centre than the site centroid, which could explain why such a high proportion of commuters are shown walking to work in the city centre)
# For sites with 2 or more origin MSOAs, combine flows to avoid having multiple desire lines to the same destination MSOA
desire_lines_combined = desire_lines_pops %>%
group_by(geo_code2) %>%
summarise(
geo_code1 = geo_code1[1], # do we even need this?
across(all:other, sum)
)
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
#> although coordinates are longitude/latitude, st_union assumes that they are planar
desire_lines_combined$length = stplanr::geo_length(desire_lines_combined)
# todo: add PT
desire_lines_combined = desire_lines_combined %>%
mutate(pwalk_commute_base = foot/all) %>%
mutate(pcycle_commute_base = bicycle/all) %>%
mutate(pdrive_commute_base = car_driver/all) %>%
mutate(gradient = 0) #todo: get proper gradients
desire_lines_combined = desire_lines_combined %>%
select(geo_code1, geo_code2, all:other, length, gradient, pwalk_commute_base:pdrive_commute_base) %>%
rename(all_commute_base = all, walk_commute_base = foot, cycle_commute_base = bicycle, drive_commute_base = car_driver)
st_precision(desire_lines_combined) = 1000000
dsn = file.path("data-small", site_name, "all-census-od.csv")
readr::write_csv(desire_lines_combined, file = dsn)
# Round decimals and select sets of desire lines --------------------------
# desire_lines_rounded = desire_lines_scenario %>%
# mutate(across(where(is.numeric), round, 6))
desire_lines_rounded = desire_lines_combined %>%
mutate(across(all_commute_base:other, smart.round))
# desire_lines_rounded = desire_lines_scenario %>%
# mutate(across(c(all_commute_base:other, walk_commute_godutch:drive_commute_godutch), smart.round)) #%>%
# rename(all_commute_base = all, walk_commute_base = foot, cycle_commute_base = bicycle, drive_commute_base = car_driver)
desire_lines_20km = desire_lines_rounded %>%
filter(length <= max_length)
desire_lines_threshold = desire_lines_rounded %>%
filter(all_commute_base >= min_flow_routes)
desire_lines_bounding = desire_lines_20km %>%
filter(geo_code2 %in% desire_lines_threshold$geo_code2)
# Large study area MSOAs --------------------------------------------------
# work_zone = inner_join(zones_msoa_national %>% select(geo_code),
# desire_lines_bounding %>% st_drop_geometry() %>% select(geo_code2),
# by = c("geo_code" = "geo_code2"))
# home_zone = inner_join(zones_msoa_national %>% select(geo_code),
# desire_lines_bounding %>% st_drop_geometry() %>% select(geo_code1),
# by = c("geo_code" = "geo_code1"))
# home_zone = unique(home_zone)
# zones_touching_large_study_area = bind_rows(home_zone, work_zone) %>%
# unique()
large_study_area = sf::st_convex_hull(sf::st_union(desire_lines_bounding))
#> although coordinates are longitude/latitude, st_union assumes that they are planar
large_study_area = stplanr::geo_buffer(large_study_area, dist = large_area_buffer)
# mapview(desire_lines_bounding) + mapview(large_study_area)
# zones_touching_large_study_area2 = zones_msoa_national[convex_hull, , op = sf::st_intersects]
# large_study_area = st_union(zones_touching_large_study_area)
# large_study_area = sfheaders::sf_remove_holes(large_study_area)
# large_study_area2 = nngeo::st_remove_holes(large_study_area)
# mapview(desire_lines_bounding) + mapview(large_study_area)
# zones_without_holes = zones_msoa_national[large_study_area, , op = sf::st_within]
# zones_without_holes = zones_without_holes %>%
# select(geo_code)
# st_precision(zones_without_holes) = 1000000
dsn = file.path("data-small", site_name, "large-study-area.geojson")
file.remove(dsn)
#> [1] TRUE
sf::write_sf(large_study_area, dsn = dsn)
# sf::write_sf(zones_without_holes, dsn = dsn)
desire_lines_many = desire_lines_rounded[large_study_area, , op = sf::st_within]
#> although coordinates are longitude/latitude, st_within assumes that they are planar
# desire_lines_many = desire_lines_many %>%
# select(geo_code1, geo_code2, all_commute_base, walk_commute_base, cycle_commute_base, drive_commute_base, walk_commute_godutch:drive_commute_godutch)
desire_lines_many = desire_lines_many %>%
select(geo_code1, geo_code2, all_commute_base, walk_commute_base, cycle_commute_base, drive_commute_base)
# Create routes and generate Go Dutch scenario ---------------------
cl = parallel::makeCluster(parallel::detectCores())
routes_fast = stplanr::route(l = desire_lines_many, route_fun = cyclestreets::journey, cl = cl)
#> Most common output is sf
routes_balanced = stplanr::route(l = desire_lines_many, route_fun = cyclestreets::journey, cl = cl, plan = "balanced")
#> Most common output is sf
routes_quiet = stplanr::route(l = desire_lines_many, route_fun = cyclestreets::journey, cl = cl, plan = "quietest")
#> Most common output is sf
routes_walk = stplanr::route(l = desire_lines_many, route_fun = stplanr::route_osrm, cl = cl)
#> Most common output is sf
routes_fast$busyness = routes_fast$busynance / routes_fast$distances
routes_fast_grouped = routes_fast %>%
group_by(geo_code1, geo_code2) %>%
mutate(
n = n(), #could remove
all_commute_base = mean(all_commute_base),
cycle_commute_base = mean(cycle_commute_base),
mean_gradient = weighted.mean(gradient_smooth, distances),
distance_m = sum(distances),
mean_busyness = weighted.mean(busyness, distances),
max_busyness = max(busyness)
) %>%
ungroup()
routes_fast_grouped$pcycle_commute_godutch = pct::uptake_pct_godutch_2020(distance = routes_fast_grouped$distance_m, gradient = routes_fast_grouped$mean_gradient)
routes_fast_grouped$cycle_commute_godutch = routes_fast_grouped$pcycle_commute_godutch * routes_fast_grouped$all_commute_base
routes_fast_grouped = routes_fast_grouped %>%
mutate(cycle_commute_godutch = smart.round(cycle_commute_godutch)) %>%
mutate(across(c(mean_gradient, mean_busyness), round, 6))
routes_fast_save = routes_fast_grouped %>%
select(geo_code1, geo_code2, distance_m, mean_gradient, mean_busyness, all_commute_base, cycle_commute_base, cycle_commute_godutch)
# routes_walk$busyness = routes_walk$busynance / routes_walk$distances # fails
routes_walk_grouped = routes_walk %>%
group_by(geo_code1, geo_code2) %>%
mutate(
n = n(), #could remove
# fails so commented out (RL)
# all_commute_base = mean(all_commute_base),
# cycle_commute_base = mean(cycle_commute_base),
# mean_gradient = weighted.mean(gradient_smooth, distances),
# distance_m = sum(distances),
# mean_busyness = weighted.mean(busyness, distances),
# max_busyness = max(busyness)
) %>%
ungroup()
# fails (RL)
# routes_walk_grouped$pcycle_commute_godutch = pct::uptake_pct_godutch_2020(distance = routes_walk_grouped$distance_m, gradient = routes_walk_grouped$mean_gradient)
# routes_walk_grouped$cycle_commute_godutch = routes_walk_grouped$pcycle_commute_godutch * routes_walk_grouped$all_commute_base
routes_walk_save = routes_walk_grouped %>%
# select(geo_code1, geo_code2, distance_m, mean_gradient, mean_busyness, all_commute_base, cycle_commute_base, cycle_commute_godutch, busyness)
select(geo_code1, geo_code2, duration)
dsn = file.path("data-small", site_name, "routes-fast.geojson")
file.remove(dsn)
#> [1] TRUE
sf::write_sf(routes_fast_save, dsn = dsn)
# dsn = file.path("data-small", site_name, "routes-balanced.geojson")
# file.remove(dsn)
# sf::write_sf(routes_balanced_save, dsn = dsn)
# dsn = file.path("data-small", site_name, "routes-quiet.geojson")
# sf::write_sf(routes_quiet_save, dsn = dsn)
dsn = file.path("data-small", site_name, "routes-walk.geojson")
sf::write_sf(routes_walk_save, dsn = dsn)
#> Warning in CPL_write_ogr(obj, dsn, layer, driver,
#> as.character(dataset_options), : GDAL Error 6: DeleteLayer() not supported by
#> this dataset. Created on 2021-01-26 by the reprex package (v0.3.0) |
Heads-up @joeytalbot the latest commit fixes what could be considered a bug in |
Here is the same data, in |
I think you can do this in overline by giving each segment a unique numeric id and including it in the attributes to sum. You will get back a column of nonsense numbers but overline won't merge across differently numbered sections |
It looks like we have several variants of |
I suggest we go with the new one - to discuss. |
No description provided.