--- title: "Zonebuilder hackathon" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Zonebuilder hackathon} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( eval = FALSE, collapse = TRUE, comment = "#>" ) ``` ## Introduction **zonebuilder** is a package for exploring zoning systems. This document contains ideas on challenges that can be tackled using zoning systems, example code to get started and suggestions of how to get involved. ## Setup To ensure that you have the necessary software installed, try running the following lines of code in an R console (you need the latest version of the package): ```{r, eval=FALSE} remotes::install_github("zonebuilders/zonebuilder") remotes::install_github("itsleeds/pct") ``` ```{r setup} library(zonebuilder) library(dplyr) library(tmap) tmap_mode("view") ``` Ideas for hackathon: - Explore results from automated zoning of a range of cities - How many supermarkets in different zones of the city? - Explore how mode and distance of travel changes depending on city zones - Explore how to calculate traveltimes from zone to zone for different travel modalities - Explore how traveltimes from cityzones to citycentre for different modalities for multiple cities affect number of commuters - Find a datadriven method for defining the city centre (e.g. density of adresses, population density, building date, number of companies, number of nodes of the road infrastructure). - Number of houses vs estimated population in different zones using UK data - Demonstrate aggregagation of OD data into zoning system ```{r, eval=FALSE} zones_west_yorkshire = pct::get_pct_zones("west-yorkshire") zones_leeds_official = zones_west_yorkshire %>% filter(lad_name == "Leeds") ``` ```{r, eval=FALSE} leeds_centroid = tmaptools::geocode_OSM(q = "Leeds", as.sf = TRUE) ``` ```{r, echo=FALSE, eval=FALSE} saveRDS(zones_leeds_official, "zones_leeds_official.Rds") piggyback::pb_upload("zones_leeds_official.Rds") piggyback::pb_download_url("zones_leeds_official.Rds") saveRDS(zones_leeds_zb, "zones_leeds_zb.Rds") piggyback::pb_upload("zones_leeds_zb.Rds") ``` You can get and plot the output of the preceding code chunk with: ```{r} leeds_centroid = readRDS(url("https://github.com/zonebuilders/zonebuilder/releases/download/0.0.1/leeds_centroid.Rds")) zones_leeds_official = readRDS(url("https://github.com/zonebuilders/zonebuilder/releases/download/0.0.1/zones_leeds_official.Rds")) zone_outline = zones_leeds_official %>% sf::st_buffer(dist = 0.0001) %>% sf::st_union() zones_leeds_zb = zb_zone(x = zone_outline, point = leeds_centroid) tm_shape(zones_leeds_zb) + tm_borders() + tm_text("label") ``` ## Explore results of automated zoning system ### Generate zones for different cities The zoning systems works well to represent cities that have a clear centre (monocentric cities) with city zones connected by radial and circular orbital routes, such as Erbil: ```{r} city_name = "Erbil" city_centre = tmaptools::geocode_OSM(city_name, as.sf = TRUE) zones_erbil = zb_zone(point = city_centre, n_circles = 5) tm_shape(zones_erbil) + tm_borders() + tm_text("label") + tm_basemap(server = leaflet::providers$OpenStreetMap) # zb_view(zones_erbil) ``` The zoning system works less well for other cities, e.g. cities with asymetric and polycentric urban morphologies such as Dhakar, shown below. ```{r} city_name = "Dhaka" city_centre = tmaptools::geocode_OSM(city_name, as.sf = TRUE) zones_dhaka = zb_zone(point = city_centre, n_circles = 5) tm_shape(zones_dhaka) + tm_borders() + tm_text("label") + tm_basemap(server = leaflet::providers$OpenStreetMap) ``` ```{r, eval=FALSE, echo=FALSE} # Aim: get the largest cities in the world cities_worldwide = rnaturalearth::ne_download(scale = 10, type = "populated_places") city_names = c( "Dheli", "Mexico City", "Tokyo", "Beijing", ) city_name = "Dheli" city_centre = tmaptools::geocode_OSM(city_name, as.sf = TRUE) zones_dhaka = zb_zone(point = city_centre, n_circles = 5) tm_shape(zones_dhaka) + tm_borders() + tm_text("label") ``` ### How many supermarkets in different zones of the city? ```{r, eval=FALSE} devtools::install_github("itsleeds/geofabrik") library(geofabrik) leeds_shop_polygons = get_geofabrik(leeds_centroid, layer = "multipolygons", key = "shop", value = "supermarket") ``` ```{r, eval=FALSE, echo=FALSE} saveRDS(leeds_shop_polygons, "leeds_shop_polygons.Rds") piggyback::pb_upload("leeds_shop_polygons.Rds") piggyback::pb_download_url("leeds_shop_polygons.Rds") saveRDS(leeds_centroid, "leeds_centroid.Rds") piggyback::pb_upload("leeds_centroid.Rds") piggyback::pb_download_url("leeds_centroid.Rds") # leeds_roads = get_geofabrik(name = leeds_centroid) # leeds_shop_points = get_geofabrik(leeds_centroid, layer = "points", key = "amenity", value = "shop") ``` We have pre-saved the results as follows: ```{r} leeds_shop_polygons = readRDS(url("https://github.com/zonebuilders/zonebuilder/releases/download/0.0.1/leeds_shop_polygons.Rds")) z = zb_zone(zones_leeds_official, point = leeds_centroid, n_circles = 5) z_supermarkets = aggregate(leeds_shop_polygons["shop"], z, FUN = length) tm_shape(z_supermarkets) + tm_polygons("shop", alpha = 0.5, title = "N. Supermarkets") ``` #### Explore how mode and distance of travel changes depending on city zones ```{r} ``` Robin to create UK example #### Demo Dutch cities and commuting See [demo Dutch cities vignette](https://zonebuilders.github.io/zonebuilder/articles/demo_dutch_cities.html)