inst/doc/pct_to_abstr.R

## ----include=FALSE------------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE
)

## -----------------------------------------------------------------------------
# ####
# ####
# #### AIM: Use PCT data to create scenario of change where commuting cycling levels increase and car journeys decrease which can be imported
# ####      into A/B Street city simulation software. This method should be fully reproducible for all other pct_regions.
# ####
# ####

## -----------------------------------------------------------------------------
# #### INSTALL PACKAGES ####
# cran_pkgs = c("abstr", "pct", "osmextract", "sf", "tidyverse")
# remotes::install_cran(cran_pkgs)
# #### LOAD PACKAGES ####
# library(abstr)
# library(pct)
# library(osmextract)
# library(sf)
# library(dplyr)

## -----------------------------------------------------------------------------
# pct_regions$region_name

## -----------------------------------------------------------------------------
# region_name = "devon"

## -----------------------------------------------------------------------------
# lookup = pct::pct_regions_lookup
# table(lookup$lad16nm[lookup$region_name == region_name])

## -----------------------------------------------------------------------------
# lad_name = "Exeter"

## -----------------------------------------------------------------------------
# ####    READ DATA ####
# devon_zones = get_pct_zones(region = region_name, geography = "msoa") # get zone data
# # filter for exeter
# exeter_zones = devon_zones %>% filter(lad_name == lad_name) %>%
#   select(geo_code)
# # get commute od data
# exeter_commute_od = get_pct_lines(region = region_name, geography = "msoa") %>%
#   filter(lad_name1 == lad_name & lad_name2 == lad_name) # filter for exeter

## -----------------------------------------------------------------------------
# exeter_commute_od = exeter_commute_od %>%
#   mutate(cycle_base = bicycle) %>%
#   mutate(walk_base = foot) %>%
#   mutate(transit_base = bus + train_tube) %>% # bunch of renaming -_-
#   mutate(drive_base = car_driver + car_passenger + motorbike + taxi_other) %>%
#   mutate(all_base = all) %>%
#   mutate(
#     # create new columns
#     pcycle_godutch_uptake = uptake_pct_godutch_2020(distance = rf_dist_km, gradient = rf_avslope_perc),
#     cycle_godutch_additional = pcycle_godutch_uptake * drive_base,
#     cycle_godutch = cycle_base + cycle_godutch_additional,
#     pcycle_godutch = cycle_godutch / all_base,
#     drive__godutch = drive_base - cycle_godutch_additional,
#     across(c(drive__godutch, cycle_godutch), round, 0),
#     all_go_dutch = drive__godutch + cycle_godutch + transit_base + walk_base
#   ) %>%
#   select(
#     # select variables for new df
#     geo_code1,
#     geo_code2,
#     cycle_base,
#     drive_base,
#     walk_base,
#     transit_base,
#     all_base,
#     all_go_dutch,
#     drive__godutch,
#     cycle_godutch,
#     cycle_godutch_additional,
#     pcycle_godutch
#   )

## -----------------------------------------------------------------------------
# # sanity check: ensure total remains the same
# # (this is not a dynamic model where population change is factored in)
# identical(exeter_commute_od$all_base, exeter_commute_od$all_go_dutch)

## -----------------------------------------------------------------------------
# ####    DOWNLOAD OSM BUILDING DATA ####
# osm_polygons = osmextract::oe_read(
#   "https://download.geofabrik.de/europe/great-britain/england/devon-latest.osm.pbf",
#   # download osm buildings for region using geofabrik
#   layer = "multipolygons"
# )
# 
# building_types = c(
#   "yes",
#   "house",
#   "detached",
#   "residential",
#   "apartments",
#   "commercial",
#   "retail",
#   "school",
#   "industrial",
#   "semidetached_house",
#   "church",
#   "hangar",
#   "mobile_home",
#   "warehouse",
#   "office",
#   "college",
#   "university",
#   "public",
#   "garages",
#   "cabin",
#   "hospital",
#   "dormitory",
#   "hotel",
#   "service",
#   "parking",
#   "manufactured",
#   "civic",
#   "farm",
#   "manufacturing",
#   "floating_home",
#   "government",
#   "bungalow",
#   "transportation",
#   "motel",
#   "manufacture",
#   "kindergarten",
#   "house_boat",
#   "sports_centre"
# )
# osm_buildings  = osm_polygons %>%
#   filter(building %in% building_types) %>%
#   select(osm_way_id, name, building)
# 
# osm_buildings_valid = osm_buildings[sf::st_is_valid(osm_buildings), ]
# 
# exeter_osm_buildings_all = osm_buildings_valid[exeter_zones, ]

## -----------------------------------------------------------------------------
# ####  JOIN OSM BUILDINGS WITH ZONE DATA ####
# exeter_osm_buildings_all_joined = exeter_osm_buildings_all %>%
#   sf::st_join(exeter_zones)
# 
# exeter_osm_buildings_sample = exeter_osm_buildings_all_joined %>%
#   filter(!is.na(osm_way_id))
# 
# exeter_osm_buildings_tbl = exeter_osm_buildings_all %>%
#   filter(osm_way_id %in% exeter_osm_buildings_sample$osm_way_id)

## -----------------------------------------------------------------------------
# set.seed(2021) # for reproducible builds
# ####  LOGIC GATE ####
# # Logic gate for go_dutch scenario of change, where cycling levels increase to a proportion reflecting the Netherlands.
# # Switch to FALSE if you want census commuting OD
# go_dutch = TRUE
# if (go_dutch == TRUE) {
#   exeter_od = exeter_commute_od %>%
#     mutate(All = all_go_dutch) %>%
#     mutate(Bike = cycle_godutch) %>%
#     mutate(Transit = transit_base) %>%
#     mutate(Drive = drive_base) %>%
#     mutate(Walk = walk_base) %>%
#     select(geo_code1, geo_code2, All, Bike, Transit, Drive, Walk,geometry)
# } else {
#   exeter_od = exeter_commute_od %>%
#     mutate(All = all_base) %>%
#     mutate(Bike = cycle_base) %>%
#     mutate(Drive = drive_base) %>%
#     mutate(Transit = transit_base) %>%
#     mutate(Walk = walk_base) %>%
#     select(geo_code1, geo_code2, All, Bike, Transit, Drive, Walk, geometry)
# }

## -----------------------------------------------------------------------------
# ####  GENERATE A/B STREET SCENARIO ####
# output_sf = ab_scenario(
#   od = exeter_od,
#   zones = exeter_zones,
#   zones_d = NULL,
#   origin_buildings = exeter_osm_buildings_tbl,
#   destination_buildings = exeter_osm_buildings_tbl,
#   pop_var = 3,
#   time_fun = ab_time_normal,
#   output = "sf",
#   modes = c("Walk", "Bike", "Drive", "Transit")
# )

## -----------------------------------------------------------------------------
# #### SAVE JSON FILE ####
# output_json = ab_json(output_sf, time_fun = ab_time_normal, scenario_name = "Go Dutch")
# ab_save(output_json, f = "dutch.json")

## -----------------------------------------------------------------------------
# # Upload the json file for future reference
# piggyback::pb_upload("dutch.json")
# piggyback::pb_download_url("dutch.json")

Try the abstr package in your browser

Any scripts or data that you put into this service are public.

abstr documentation built on Nov. 5, 2025, 6:04 p.m.