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.


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):


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
zones_west_yorkshire = pct::get_pct_zones("west-yorkshire")
zones_leeds_official = zones_west_yorkshire %>% filter(lad_name == "Leeds")
leeds_centroid = tmaptools::geocode_OSM(q = "Leeds", as.sf = TRUE)

You can get and plot the output of the preceding code chunk with:

leeds_centroid = readRDS(url(""))
zones_leeds_official = readRDS(url(""))
zone_outline = zones_leeds_official %>%
  sf::st_buffer(dist = 0.0001) %>% 
zones_leeds_zb = zb_zone(x = zone_outline, point = leeds_centroid)
tm_shape(zones_leeds_zb) + tm_borders() +

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:

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.

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)

How many supermarkets in different zones of the city?

leeds_shop_polygons = get_geofabrik(leeds_centroid, layer = "multipolygons", key = "shop", value = "supermarket")

We have pre-saved the results as follows:

leeds_shop_polygons = readRDS(url(""))
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

Robin to create UK example

Demo Dutch cities and commuting

See demo Dutch cities vignette