How Much National Trust Or Open Access Land Is Near Railway Stations?

metadata

Recently, I posted about How Much National Trust Or Open Access Land Is Nearby? The purpose of the previous blog post was to see if I could rank different locations by how much open land there was within a given radius, as I had realised that simply asking “how far away is some open land?” is a silly question.

This blog post is a generalisation of the previous one: I have downloaded the National Public Transport Access Node (NaPTAN) dataset and repeated the same survey for every single railway station in the UK. The new script is also available in How Much Land (HML). Unfortunately, the results for Scottish railway stations are pointless as the open land datasets do not extend north of the border.

§1 Railway Stations

Below is a simple map showing all of the railway stations in the National Public Transport Access Node (NaPTAN) dataset that exist within the open land dataset (merged by How Much Land (HML)). I like the fact that the railway stations are so frequent that it is possible to infer the railway lines themselves.

Download:
  1. 512x323 (123.1 KiB)
  2. 1,024x647 (332.1 KiB)
  3. 2,048x1,293 (884.2 KiB)
  4. 2,152x1,359 (592.6 KiB)

§2 Open Land Within A 10km Radius

Looping over all of the railway stations it is possible to find out how much land is within 10km. The plot below shows the railway stations coloured according to this metric and the table below that shows the Top 10 (you can also download data as a CSV)

Download:
  1. 512x482 (217.3 KiB)
  2. 1,024x964 (684.6 KiB)
  3. 2,048x1,928 (1.9 MiB)
  4. 2,069x1,948 (1.6 MiB)
Railway Station Open Land Within 10km [%]
Garsdale Rail Station 73.60
Dent Rail Station 71.57
Alston Rail Station 71.07
Gilderdale 70.78
Slaggyford Rail Station 69.77
Kirkhaugh Rail Station 69.33
Lintley Rail Station 68.49
Ribblehead Rail Station 68.47
Stanhope Rail Station 60.60
Horton-in-Ribblesdale Rail Station 55.09

§3 Open Land Within A 20km Radius

Looping over all of the railway stations it is possible to find out how much land is within 20km. The plot below shows the railway stations coloured according to this metric and the table below that shows the Top 10 (you can also download data as a CSV)

Download:
  1. 512x482 (217.5 KiB)
  2. 1,024x964 (686.8 KiB)
  3. 2,048x1,928 (1.9 MiB)
  4. 2,069x1,948 (1.6 MiB)
Railway Station Open Land Within 20km [%]
Garsdale Rail Station 66.31
Dent Rail Station 60.29
Alston Rail Station 55.45
Kirkby Stephen Rail Station 54.50
Ribblehead Rail Station 54.17
Windermere Rail Station 53.53
Horton-in-Ribblesdale Rail Station 51.83
Gilderdale 51.78
Kirkhaugh Rail Station 49.07
Haltwhistle Rail Station 47.56

§4 Open Land Within A 30km Radius

Looping over all of the railway stations it is possible to find out how much land is within 30km. The plot below shows the railway stations coloured according to this metric and the table below that shows the Top 10 (you can also download data as a CSV)

Download:
  1. 512x482 (217.6 KiB)
  2. 1,024x964 (687.7 KiB)
  3. 2,048x1,928 (1.9 MiB)
  4. 2,069x1,948 (1.6 MiB)
Railway Station Open Land Within 30km [%]
Garsdale Rail Station 52.98
Kirkby Stephen Rail Station 52.62
Windermere Rail Station 51.45
Appleby Rail Station 50.41
Dent Rail Station 50.25
Staveley Rail Station 48.06
Ribblehead Rail Station 47.68
Horton-in-Ribblesdale Rail Station 46.46
Burneside (Cumbria) Rail Station 43.83
Bardon Mill Rail Station 43.19

§5 Open Land Within A 40km Radius

Looping over all of the railway stations it is possible to find out how much land is within 40km. The plot below shows the railway stations coloured according to this metric and the table below that shows the Top 10 (you can also download data as a CSV)

Download:
  1. 512x482 (217.7 KiB)
  2. 1,024x964 (687.7 KiB)
  3. 2,048x1,928 (1.9 MiB)
  4. 2,069x1,948 (1.6 MiB)
Railway Station Open Land Within 40km [%]
Appleby Rail Station 49.56
Kirkby Stephen Rail Station 47.07
Burneside (Cumbria) Rail Station 44.84
Staveley Rail Station 44.75
Garsdale Rail Station 44.02
Kendal Rail Station 43.99
Dent Rail Station 43.45
Oxenholme Lake District Rail Station 43.14
Oxenholme Railway Station 43.14
Penrith North Lakes Rail Station 42.82

§6 Open Land Within A 50km Radius

Looping over all of the railway stations it is possible to find out how much land is within 50km. The plot below shows the railway stations coloured according to this metric and the table below that shows the Top 10 (you can also download data as a CSV)

Download:
  1. 512x482 (217.7 KiB)
  2. 1,024x964 (687.3 KiB)
  3. 2,048x1,928 (1.9 MiB)
  4. 2,069x1,948 (1.6 MiB)
Railway Station Open Land Within 50km [%]
Kirkby Stephen Rail Station 44.34
Appleby Rail Station 44.13
Langwathby Rail Station 43.35
Kendal Rail Station 43.22
Burneside (Cumbria) Rail Station 42.76
Oxenholme Lake District Rail Station 42.31
Oxenholme Railway Station 42.30
Penrith North Lakes Rail Station 42.29
Lazonby 40.64
Lazonby Railway Station 40.62

§7 Summary

To me, there are a few interesting observations to make from the above datasets.

§8 Appendix

There is a tiny little companion script to generate downsized background images of open land for use in Python scripts.

01: #!/usr/bin/env python3
02: 
03: # NOTE: The four PNGs that are used here are the output from my GitHub
04: #       repository "hml", see:
05: #         * https://github.com/Guymer/hml
06: 
07: # Import standard modules ...
08: import os
09: import shutil
10: import subprocess
11: 
12: # Import my modules ...
13: try:
14:     import pyguymer3
15: except:
16:     raise Exception("\"pyguymer3\" is not installed; you need to have the Python module from https://github.com/Guymer/PyGuymer3 located somewhere in your $PYTHONPATH") from None
17: 
18: # Check that "convert" is installed ...
19: if shutil.which("convert") is None:
20:     raise Exception("\"convert\" is not installed") from None
21: 
22: # Define constants ...
23: datasets = [
24:     "alwaysOpen",
25:     "limitedAccess",
26:     "merged",
27:     "openAccess",
28: ]
29: 
30: # Loop over datasets ...
31: for dataset in datasets:
32:     # Deduce PNG name ...
33:     pfile1 = "{:s}.png".format(dataset)
34: 
35:     # Loop over downscaled sizes ...
36:     for width in [512, 1024, 2048, 4096]:
37:         # Deduce downscaled PNG file name ...
38:         pfile2 = "{:s}{:04d}px.png".format(dataset, width)
39: 
40:         # Skip if downscaled PNG already exists
41:         if os.path.exists(pfile2):
42:             continue
43: 
44:         print("Creating \"{:s}\" ...".format(pfile2))
45: 
46:         # Save downscaled PNG and optimize it ...
47:         subprocess.check_call(
48:             ["convert", pfile1, "-resize", "{:d}x".format(width), pfile2],
49:             encoding = "utf-8",
50:             stderr = open(os.devnull, "wt"),
51:             stdout = open(os.devnull, "wt")
52:         )
53:         pyguymer3.optimize_image(pfile2, strip = True)
54: 
You may also download “background-open-land-images.py” directly or view “background-open-land-images.py” on GitHub Gist.