Appendix

Appendix A Key Parameter Summary

  • Coordinate system & traffic direction:

    crs_metric='EPSG:27700' / crs_output='EPSG:27700';

    right_hand_traffic=True.

  • Sidepath buffer:

    sidepath_buffer_size=22; sidepath_buffer_distance=100.

  • Default one-way setting:

    default_oneway_cycle_lane='yes'; default_oneway_cycle_track='yes'.

  • Default road width (m):

    primary=17, secondary=15, tertiary=13, residential=11, living_street=6, etc.

  • Default facility/parking width (m):

    Motor vehicles 3.2, buses 4.5, bicycles 1.4, pedestrians 2.2, rail 4.5, vertical 5.0.

  • Default surface layers:

    default_highway_surface_dict, default_cycleway_surface_*, default_track_surface_dict.

  • Base components:

    base_index_dict (path/track/lanes/bus/bicycle/shared…).

  • Road class / speed limit factors:

    highway_factor_dict, maxspeed_factor_dict.

  • Factor weighting:

    highway_factor_dict_weights (higher weight for mixed with motor traffic, lower for segregated facilities).

  • Surface / smoothness factors:

    surface_factor_dict, smoothness_factor_dict.

  • Data completeness factors:

    data_incompleteness_dict (surface=30, width=25, etc.).

  • Road classes prohibited for cycling:

    cycling_highway_prohibition_list (motorway, trunk, etc.).

Appendix B Key Parameters and Mappings in Section of structural rideability

A. Global settings and network assumptions

  • Coordinate reference systems: processing CRS = EPSG:27700; output CRS = EPSG:27700.
  • Traffic side: left-hand traffic (right_hand_traffic = FALSE).
  • Sidepath detection:
    • sidepath_buffer_size = 22 m (lateral search radius)
    • sidepath_buffer_distance = 100 m (longitudinal sampling step)
    • Default one-way flags for cycle facilities: default_oneway_cycle_lane = 'yes', default_oneway_cycle_track = 'yes'.
  • Highway classes prohibited for cycling: motorway, motorway_link, trunk, trunk_link (excluded from rideability scoring).

B. Default widths (m)

  • Fallback carriageway width: 11.
  • By highway type (examples): primary=17, secondary=15, tertiary=13, residential=11, living_street=6, service=4, pedestrian=6, cycleway=1.5, footway=2, track=2.5.
  • Lane / parking templates (m): motor-vehicle lane 3.2, bus/PSV 4.5, cycle lane 1.4; parallel/angled/perpendicular parking 2.2 / 4.5 / 5.0.

C. Surface and smoothness factors

  • Surface fallbacks (examples): cycle track → paving_stones; cycle lane → asphalt; track uses tracktype to map to asphalt/compacted/unpaved /ground/grass, etc.
  • surface_factor_dict (indicative):
    • High: asphalt, paved, concrete, chipseal, metal1.0
    • Medium: paving_stones, compacted, fine_gravel, bricks0.7
    • Low: sett, cobblestone, concrete:lanes, unpaved, wood0.3
    • Very low: ground, dirt, earth, mud, gravel, grass, grass_paver, … → 0.2
    • Minimal: sand, rock0.15
  • smoothness_factor_dict: excellent=1.10, good=1.00, intermediate=0.70, bad=0.30, very_bad=0.20, horrible=0.15, very_horrible=0.10, impassable=0.

D. Road class, speed and facility/separation weighting

  • highway_factor_dict (examples): motorway=0.10, trunk=0.15, primary=0.35, secondary=0.65, tertiary=0.85, residential=1.00, living_street=1.10.

  • maxspeed_factor_dict (km/h): 20→1.05, 30→1.00, 50→0.95, 60→0.85, 70→0.70, 100→0.50.

  • Facility type weighting (illustrative groups):

    • Shared/bicycle road/shared traffic lane

    1.0

    • Advisory/central cycle lane; shared bus lane; crossings/links

    0.7

    • Exclusive/protected lane; track/path; segregated/shared footway

    0.2

    • Cycle path within track or service road where not intended for through cycling

    0

  • separation_level_dict (examples):

none=0; studs=0.1; kerb/flex_post/greenery=0.3–0.5; planter=0.6; ditch=0.8; hedge/jersey_barrier=0.9; fence/guard_rail=1.0.

E. Base index and access modifiers

  • **base_index_dict (0–100; examples):

** cycle path 100; cycle track 90; segregated path 80; shared path 70; exclusive cycle lane 80; protected lane 90; advisory lane 70; central lane 60; shared bus lane 65; bicycle road 70; shared road 60; track/service 65; link 60; crossing 60.

  • Motor-vehicle access bonus (motor_vehicle_access_index_dict):

no=100, agricultural/forestry=90, private/customers/delivery/permit=80, destination=70.

  • Traffic signs (examples):

mandatory cycle signs ['237','240','241']; non-mandatory ['none','1022'].

F. Data completeness weights (penalties for missing attributes)

width=25, surface=30, smoothness=10, width:lanes=10, parking=25, crossing=10, crossing_markings=10, maxspeed=15, lit=15.

G. Functional mappings used in analysis

  • Slope-to-factor mapping:
    ≤2% → 1.00; 2–4% → 0.95; 4–6% → 0.85; 6–8% → 0.75; 8–10% → 0.65; >10% → 0.90.
  • Level of Traffic Stress (LTS) to factor:
    LTS 1 → 1.00; LTS 2 → 0.90; LTS 3 → 0.75; LTS 4 → 0.60; other/NA → 0.90.

H. Fields included in processing and outputs (abridged)

  • Input attributes (typical):

highway, name, oneway, lanes, width*, maxspeed, lit, incline, surface, smoothness, cycleway*, sidewalk*, parking*, separation*, buffer*, traffic_mode*, traffic_sign*, etc.

  • Key derived/output fields:

id, way_type, base_index, fac_1, fac_2, fac_4, fac_5 (LTS), environment indices, completeness flags, and standardised proc_* fields used for modelling and visualisation.

Appendix C Key Parameters and Mappings in Section of structural rideability

Category Parameter Name Value in Code Notes
General settings CRS EPSG:27700 Unified projected coordinate system for analysis and outputs
NA segment_geometry LineString (S1 output) Base geometry used for buffering and sampling
GVI processing gvi_source Treepedia (~2015 GSV) Data source
NA gvi_statistic mean Mean of all GVI points within the buffer
NA gvi_buffer_radius 30 m Buffer radius centered at the segment midpoint
NA borough_mean_impute TRUE Impute missing values with the mean of the containing borough
NA gvi_flag 0/1 0 = use buffer mean; 1 = use borough mean
NO2 processing no2_source NO2 raster (AQI/LAEI2025) Data source (read from .tif)
NA no2_sample_step 10 m Spacing of sample points along the segment
NA no2_statistic mean Average raster value over sampled points
NA nodata_handling exclude Exclude NoData pixels during aggregation
Natural-feature proximity nature_source OSM-extracted park / water / wood / grass Data source
NA buffer_rings [50, 40, 30, 20, 10, 1] m Multiple concentric buffers from far to near
NA score_mapping Far rings = lower score; near rings = higher score (near overwrites far) See code mapping table for exact scores
NA override_rule nearer overwrites farther Scores from nearer rings override farther ones
Normalization & composition norm_method min–max Normalize all inputs to [0, 1]
NA no2_inverse 1 - minmax(NO₂) Higher pollution → lower score; invert after min–max
NA weights GVI = 0.5, NO₂ = 0.3, Natural = 0.2 Weights for the environmental perception index
NA env_index_range 0–1 Output is a continuous proportion value

Appendix D Research log

Date Task
28th June 2025 Outlined research framework and indicator system
5th July 2025 Reviewed data sources and access channels
10th July 2025 Downloaded street network data and checked structure
15th July 2025 Processed GVI remote sensing data
20th July 2025 Collected AQI and landscape data
21st July 2025 Cleaned street network dataset
24th July 2025 Built LTS classification fields
27th July 2025 Generated slope layer
30th July 2025 Standardized environmental indicators
2nd Aug 2025 Merged datasets and created master table
6th Aug 2025 Calculated centrality measures
10th Aug 2025 Conducted correlation and clustering analysis
13th Aug 2025 Produced spatial maps (LTS, slope, GVI)
15th Aug 2025 Started writing methodology
17th Aug 2025 Computed Impedance Index
19th Aug 2025 Expanded results draft
20th Aug 2025 Continued writing methodology and results
21st Aug 2025 Integrated figures into results
22nd Aug 2025 Linked literature review with methodology
24th Aug 2025 Drafted discussion section
26th Aug 2025 Finalized writing