Introduction

This document demonstrates the data outputs from the ACTON project based on case study regions. It is a reproducible technical document with code that shows how to get the results with the acton package. To reproduce the results you must first install the acton package as follows:

remotes::install_github("cyipt/acton")

A case study of Leeds

Data from PlanIt, accessed using the acton R package, was used to identify four recent large planning applications:

The following code gets and subsets the relevant PlanIt data for Leeds:

# note work in progress!
applications_leeds = get_planit_data(
  limit = 500,
  auth = "Leeds",
  app_size = "large",
  app_state = "permitted"
  )
#> Getting data from https://planit.org.uk/api/applics/geojson?limit=500&bbox=&end_date=2021-01-27&start_date=2000-02-01&pg_sz=500&auth=Leeds&app_size=large&app_state=permitted
nrow(applications_leeds)
#> [1] 291
tm_shape(applications_leeds) + tm_dots(col = "app_type") +
  tm_basemap(server = "CartoDB.Positron")
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1

The result in the applications_leeds object contains much rich information about the planning applications, under the following column headings:

names(applications_leeds)
#>  [1] "address"          "altid"            "app_size"         "app_state"       
#>  [5] "app_type"         "associated_id"    "authority_id"     "authority_name"  
#>  [9] "consulted_date"   "decided_date"     "description"      "distance"        
#> [13] "docs"             "lat"              "link"             "lng"             
#> [17] "n_statutory_days" "name"             "other_fields"     "postcode"        
#> [21] "rec_type"         "reference"        "source_url"       "start_date"      
#> [25] "uid"              "url"              "when_updated"     "geometry"
DT::datatable(applications_leeds[-c(1, 9, 11, 12, 13, 18, 21)])

The following code gets the specific applications we will use for this case study of Leeds:

ids = c(
  "13/05235/FU",
  "15/04151/FU",
  "15/00415/FU",
  "15/01973/FU"
)
applications_case_study = applications_leeds[
  applications_leeds$uid %in% ids,
]
nrow(applications_case_study)
#> [1] 4

The descripton of each is shown in the table below, with context shown for each in the following subsections:

applications_case_study %>% 
  sf::st_drop_geometry() %>% 
  select(description, url) %>% 
  knitr::kable()
description url
Residential development of 270 houses with associated roads, sewers and infrastructure https://publicaccess.leeds.gov.uk/online-applications/applicationDetails.do?keyVal=NRFIZQJB17S00&activeTab=summary
Development of 290 Residential Dwellings with open space and associated infrastructure https://publicaccess.leeds.gov.uk/online-applications/applicationDetails.do?keyVal=NMH4Q7JB17S00&activeTab=summary
312 dwellings including new open space and associated works https://publicaccess.leeds.gov.uk/online-applications/applicationDetails.do?keyVal=NIMQG0JB1SR00&activeTab=summary
Full application for 189 new homes including affordable houses and elderly persons apartments, commercial facilities including retail and industrial/employment units and outline application for additional commercial uses https://publicaccess.leeds.gov.uk/online-applications/applicationDetails.do?keyVal=MW37KEJB17S00&activeTab=summary

We will describe the Allerton Bywater application in more depth and use it to illustrate the data returned by the PlanIt API, before describing the other development sites.

Allerton Bywater Millennium Community

  • One of a series of Millennium Communities, the development at Allerton Bywater was announced by John Prescott in 1998. The homes lie on the site of Allerton Colliery, which was the last remaining colliery in Leeds when it closed in 1995. Prior to the development, Allerton Bywater village had a population of around 4,000, and the aim was to incorporate the whole of the village in the project, rather than solely focusing on the site itself. For example, a £500,000 community fund was made available to the parish council to spend on local projects, and community buildings in the village were also refurbished. In total there was £24 million upfront public investment by English Partnerships and the HCA. This included drainage, site clearance and decontamination.

  • The development incorporates new industrial and office units as well as homes, with high environmental standards for both of these. A design code was adopted and development of the site began in 2005. The industrial units at the east of the site were the first in the UK to meet the BREEAM ‘Excellent’ standard, while the new homes were built to the EcoHomes ‘Excellent’ standard or the Code for Sustainable Homes Level 3. A number of homes were built under a ‘Design for Manufacture’ competition for a construction cost of no more than £60,000.

  • In total there are 562 homes in the Millennium Community. A Sustrans cycle route passes through the site and there is good walking and cycling access to the rest of the village and its surrounds, although parts of the cycle route can get very muddy in winter. Local services such as shops, pubs, cafes, a primary school, park, community centre and nature reserve lie on the edge of the site or within easy walking distance.

  • Plans for buses to be routed through the site did not materialise. The village lies eight miles southeast of Leeds and the buses to Leeds run roughly every 30 minutes. There are more frequent services to Garforth and Castleford. The nearest railway station is Castleford, at 43 minutes walk, with a well-built riverside path to follow. Much of the Millennium Community is designed as a HomeZone with shared space streets, although these tend to fill up with parked cars. Initial phases were built with 1.6 parking spaces per dwelling, but the amount of on-street parking lead to calls to increase this and later phases have 2 parking spaces per dwelling.

Data on the application

The planning application we have selected for Allerton Bywater relates to the final phase of the Millennium Community. This includes 189 homes and has planning consent 13/05235/FU.

We can see that this is classified by PlanIt.org.uk as a large application. The application was submitted in December 2013 by Keepmoat Homes and the Homes and Communities Agency and was approved in November 2014.

Available fields include links to the full PlanIt record and to planning application information from Leeds City Council.

allerton_bywater = applications_case_study[applications_case_study$uid == "13/05235/FU",]
allerton_bywater$description
#> [1] "Full application for 189 new homes including affordable houses and elderly persons apartments, commercial facilities including retail and industrial/employment units and outline application for additional commercial uses"
allerton_bywater$link
#> [1] "https://planit.org.uk/planapplic/Leeds/13/05235/FU/"
allerton_bywater$url
#> [1] "https://publicaccess.leeds.gov.uk/online-applications/applicationDetails.do?keyVal=MW37KEJB17S00&activeTab=summary"
allerton_bywater$app_state
#> [1] "Permitted"
allerton_bywater$app_size
#> [1] "Large"
allerton_bywater$app_type
#> [1] "Full"
allerton_bywater$address
#> [1] "Park Lane Allerton Bywater WF10"
allerton_bywater$start_date
#> [1] "2013-12-05"
allerton_bywater$decided_date
#> [1] "2014-11-10"

The original outline planning application for the entire Allerton Bywater Millennium Community can be found as follows. This was submitted in November 2000 and approved in August 2002.

allerton_bywater_original = get_planit_data(query_type = "planapplic", query_value = "33/311/00/OT@Leeds")
#> Getting data from https://planit.org.uk/planapplic/33/311/00/OT@Leeds/geojson?limit=6&bbox=&end_date=2021-01-27&start_date=2000-02-01&pg_sz=6
allerton_bywater_original$description
#> [1] "Outline application to erect residential commercial and community developments with infrastructure and green space"
allerton_bywater_original$url
#> [1] "https://publicaccess.leeds.gov.uk/online-applications/applicationDetails.do?activeTab=summary&keyVal=ZZZTK2JBXE141"
allerton_bywater_original$start_date
#> [1] "2000-11-13"
allerton_bywater_original$decided_date
#> [1] "2002-08-20"

Other Leeds case study sites

An overview of the four case study sites is shown in the map below.

applications_case_study$site = as.factor(c("Tyersal","Micklefield","Leeds Climate Innovation District","Allerton Bywater"))
tm_shape(applications_case_study) +
  tm_dots(col = "site", size = 0.1)  +
  tm_basemap(server = "CartoDB.Positron")

Leeds Climate Innovation District

  • Situated on the banks of the River Aire, close to Leeds city centre, the Climate Innovation District is being developed by Leeds-based firm Citu. The development is built around high environmental standards including low carbon timber-framed homes with high levels of insulation and a Mechanical Ventilation Heat Recovery System preventing the need for gas central heating. The homes will be served by solar panels on-site via a private-wire network; a Community Interest Company will be set up that will own the utility cooperative.

  • A new foot/cycle bridge has been erected over the River Aire to connect the two halves of the site and allow a traffic-free route into the city centre. On-site car parking is in an undercroft; these spaces have to be purchased at a cost of £15,000. Cycle parking is available on-site.

  • In total there will be over 520 new homes. Phase 1 to the north of the river will contain 312 dwellings, with planning consent 15/00415/FU.

Micklefield

  • Planning consent 15/01973/FU is for a development of 292 residential dwellings by house builders Barratt Homes and Persimmon Homes on greenfield land in the village of Micklefield, nine miles east of Leeds.

  • The site does not fully meet the Leeds Core Strategy Accessibility Standards. There are bus stops nearby but the services are infrequent, with only an hourly service increasing to two an hour at peak times. However, Micklefield station allows access to Leeds city centre with a 20 minute journey time. The S106 agreement includes £8000 for improved cycle facilities at the station. It also mandates 15% affordable housing, of which 60% is for social rent.

Tyersal

  • Planning consent 15/04151/FU was gained in April 2016 for a 270 dwelling development on a greenfield site at Tysersal Lane by developer Gleeson Homes. Although the site lies within ths bounds of Leeds it is actually closer to Bradford, and the only road access is to west, via the Bradford suburb of Holme Wood. Regular buses to Bradford city centre pass by the edge of the site. The proposed parking provision is approximately two spaces per dwelling.

  • The site does not fully meet the Leeds Core Strategy Accessibility Standards. A viability assessment was accepted, stating that the scheme could not provide all of the usual planning gain contributions (S106 monies), with no affordable homes due to be built on site. This is subject on ongoing review. Gleeson’s state that their homes are priced at a level so that they can be afforded by 90% of local people in full time employment.

Accessibility indicators

Journey time statistics (JTS) are available from the Department for Transport recording accessibility at the geographical level of the LSOA (an area covering approximately 1500 residents or 650 households). The statistics include average minimum travel times to key local services and destinations, such as town centres, centres of employment, primary schools, secondary schools, food stores and GP surgeries.

Travel times are calculated for three modes of travel - by car, by cycle, and by a mode that combines walking and public transport.

In the following code we download data for journey times to the nearest centres of employment, town centres, food stores, primary schools, secondary schools and GP surgeries.

There are several different statistics representing employment centres. We combine measures for employment centres of different sizes to create a single employment metric. We then combine this with the other journey time statistics to generate a single index of accessibility for each mode of travel.

library(dplyr)

zones_leeds = pct::get_pct_zones(region = "west-yorkshire", geography = "lsoa", purpose = "commute") %>% rename(LA_Code = lad11cd) %>% st_set_crs(4326)

which(st_is_valid(zones_leeds) == FALSE)
zones_leeds = lwgeom::st_make_valid(zones_leeds)
which(st_is_valid(zones_leeds) == FALSE)

access_employ = get_jts_data("jts0501", 2017)
access_town = get_jts_data("jts0508", 2017)
access_food = get_jts_data("jts0507", 2017)
access_primary = get_jts_data("jts0502", 2017)
access_secondary = get_jts_data("jts0503", 2017)
access_gp = get_jts_data("jts0505", 2017)

access_employ$weightedJobsPTt = apply(
  X = access_employ[c("Jobs100EmpPTt", "Jobs500EmpPTt", "Jobs5000EmpPTt")],
  MARGIN = 1,
  FUN = weighted.mean,
  w = c(100, 500, 5000)
)
access_employ$weightedJobsCyct = apply(
  X = access_employ[c("Jobs100EmpCyct", "Jobs500EmpCyct", "Jobs5000EmpCyct")],
  MARGIN = 1,
  FUN = weighted.mean,
  w = c(100, 500, 5000)
)
access_employ$weightedJobsCart = apply(
  X = access_employ[c("Jobs100EmpCart", "Jobs500EmpCart", "Jobs5000EmpCart")],
  MARGIN = 1,
  FUN = weighted.mean,
  w = c(100, 500, 5000)
)

zones_leeds = inner_join(zones_leeds,access_town,by = c("geo_code" = "LSOA_code","LA_Code"))
zones_leeds = inner_join(zones_leeds,access_food,by = c("geo_code" = "LSOA_code","LA_Code"))
zones_leeds = inner_join(zones_leeds,access_employ,by = c("geo_code" = "LSOA_code","LA_Code"))
zones_leeds = inner_join(zones_leeds,access_primary,by = c("geo_code" = "LSOA_code","LA_Code"))
zones_leeds = inner_join(zones_leeds,access_secondary,by = c("geo_code" = "LSOA_code","LA_Code"))
zones_leeds = inner_join(zones_leeds,access_gp,by = c("geo_code" = "LSOA_code","LA_Code"))

zones_leeds = zones_leeds %>%
  mutate(
    index_PT = (weightedJobsPTt+TownPTt+FoodPTt+PSPTt+SSPTt+GPPTt)/6,
    index_Cyc = (weightedJobsCyct+TownCyct+FoodCyct+PSCyct+SSCyct+GPCyct)/6,
    index_Car = (weightedJobsCart+TownCart+FoodCart+PSCart+SSCart+GPCart)/6
    )

Now we can map the journey time statistics across Leeds and West Yorkshire.

The first map shows the LSOA zones in West Yorkshire together with their working age population. LSOA population should normally be relatively constant, but it is considerably higher in some Leeds LSOAs. This may be due to new residential developments built after the LSOA boundaries were set, in particular student accommodation and the recent growth in city centre living.

qtm(zones_leeds, "Empl_pop")

Multiple statistics are available for access to centres of employment, including travel time to locations with 100-499 jobs, to locations with 500-4999 jobs, and to locations with 5000+ jobs. As explained earlier, we have combined these three statistics to produce a single measure weighted by the number of jobs. This is shown in the maps below.

tm_shape(zones_leeds) +
  tm_polygons(c("weightedJobsPTt","weightedJobsCyct","weightedJobsCart"),palette="-cividis",title = c("Walk/PT","Cycle","Car") +
  tm_shape(applications_case_study) +
  tm_dots(size=0.2) +
  tm_facets(nrow = 1)

We have then combined the weighted access to employment measure with the measures for access to food stores, town centres, primary schools, secondary schools and GPs. By adding together all of these scores we have generated a single accessibility index for each mode of travel.

tm_shape(zones_leeds) +
  tm_polygons(c("index_PT","index_Cyc","index_Car"),palette="-viridis",title = c("Walk/PT","Cycle","Car") +
  tm_shape(applications_case_study) +
  tm_dots(size=0.2) +
  tm_facets(nrow = 1)

According to these measures, there are many areas that have poor accessibility by active modes and public transport.

Route busyness

These maps use OD data for journeys to work from the LSOA centroid closest to each site, but changing to point of origin of the journeys so they start at our case study sites. The desire lines are converted to routes using ‘fastest journey’ option of the cyclestreets::journey() function.

The thickness of the lines is proportional to the number of journeys (using all modes of transport), and the colour represents the busyness of the roads.

We can see there are some roads used by commuters from these sites that are particularly busy. These include the A63 near Garforth and the A61 on the eastern edge of Leeds City Centre (circle these roads). However, an integral component of the Leeds Climate Innovation District is the construction of a new foot and cycle bridge over the River Aire. This bridge is already in place and allows residents to access Leeds city centre via an off-road riverside path, avoiding the need to use the A61. We should model how this bridge impacts the accessiblity of the site.

knitr::include_graphics("https://user-images.githubusercontent.com/52210872/73958076-43d34100-48ff-11ea-80a3-f06f8205e8d2.png")

knitr::include_graphics("https://user-images.githubusercontent.com/52210872/73958097-4b92e580-48ff-11ea-9475-5332580f7083.png")

knitr::include_graphics("https://user-images.githubusercontent.com/52210872/75466061-79f56500-5981-11ea-85af-d154cb907be8.png")

knitr::include_graphics("https://user-images.githubusercontent.com/52210872/73958128-58173e00-48ff-11ea-8cdb-00eb2ca66060.png")

Joining on active transport variables

# zone_centroids = pct::get_pct_centroids()
applications_joined = sf::st_join(applications_case_study,
            zones_leeds %>% select(index_PT, index_Cyc, index_Car)
            ) 
#> although coordinates are longitude/latitude, st_intersects assumes that they are planar
#> although coordinates are longitude/latitude, st_intersects assumes that they are planar
# applications_joined = sf::st_join(applications_case_study,
#             zones_leeds %>% select(index_PT, index_Cyc, index_Car)
#             , join = st_nearest_feature 
#             ) 
plot(applications_joined %>% select(matches("index")))

Indicators

The next stage is to convert the rich data we now have for each development into an indicator of active transport provision. That is covered in the next article.