=== versions === python 3.12.0 | shapely 2.2.0 | geopandas 1.2.0 | osmnx 2.1.1 | scipy 1.18.1 | numpy 2.5.4 | pandas 3.1.0 === Step 1: catchment boundary and rain gauges === Eden at Sheepmount (NRFA 76007): polygon area 2,276.0 km2 (NRFA catchment area 2,286.5 km2) EA rainfall stations within 80 km of the catchment centroid: 125; inside or within 15 km of the catchment: 61 === Step 2: 15-minute readings, 2026-10-06 to 2026-11-02 === 136,062 readings from 52 gauges (cached in ea_rain_2026-10-06_2026-11-02.csv); max single 15-minute value 57.2 mm, negative values 0 dropped 008850 (NY657958): 83% of the 2,688 expected readings dropped 051729 (NZ008020): 62% of the 2,688 expected readings dropped 047281 (SD829866): 26% of the 2,688 expected readings gauges kept (>=95% complete): 49 (19 inside the catchment) 28-day totals: min 76.6 mm, median 148.4 mm, max 725.5 mm highest totals relative to their Delaunay neighbours: gridref total nbr_median ratio max15 station 602253 NY609428 725.5 115.1 6.3 57.0 613905 NY558774 523.9 112.7 4.6 57.2 013045 NY757386 163.9 90.6 1.8 5.6 592464 NY225135 534.8 323.4 1.7 11.8 588006 SD284986 416.2 256.4 1.6 5.5 flagged 602253 (NY609428): 726 mm against a neighbour median of 115 mm, with 15-minute readings up to 57.0 mm flagged 613905 (NY558774): 524 mm against a neighbour median of 113 mm, with 15-minute readings up to 57.2 mm Thiessen mean with the flagged gauges left in: 191.4 mm; 47 gauges go forward [timer] gauges and readings: 0.2 s === Step 3: Delaunay triangles -> Voronoi cells -> clip === Delaunay triangulation: 83 triangles from 47 points Voronoi vertices are the triangle circumcentres: 83 of them cells that reach the catchment: 31 of 47 (13 from gauges outside it) clipped cells cover 100.0000% of the catchment === Step 4: Thiessen-weighted catchment rainfall === gridref total area_km2 weight station 604742 NY492308 120.9 203.7 0.090 604142 NY546551 112.7 192.0 0.084 598691 NY721194 88.0 188.3 0.083 605936 NY435360 148.4 163.5 0.072 598928 NY673144 85.4 157.6 0.069 603315 NY642703 130.1 136.4 0.060 601304 NY507159 228.0 135.0 0.059 013336 NY668423 108.0 135.0 0.059 606299 NY389564 94.0 132.8 0.058 598145 NY844121 91.9 129.4 0.057 605543 NY345358 167.3 126.6 0.056 604040 NY575537 114.4 91.0 0.040 597519 SD778963 141.6 72.5 0.032 600986 NY553115 235.3 69.1 0.030 600735 NY426265 181.5 67.3 0.030 600140 NY398120 341.2 58.0 0.026 603111 NY693777 138.8 55.1 0.024 600295 NY364174 345.5 38.1 0.017 600683 NY386223 248.9 36.3 0.016 596791 NY317503 103.0 26.8 0.012 013045 NY757386 163.9 14.4 0.006 593362 NY253249 222.8 11.0 0.005 585160 NY465051 264.6 10.3 0.005 014555 NY680640 85.8 9.7 0.004 013878 NY665530 115.8 7.2 0.003 595273 NY219412 134.5 3.5 0.002 028502 NY909121 76.6 1.8 0.001 613467 NY361683 98.2 1.6 0.001 026644 NY816290 84.8 0.9 0.000 592860 NY313195 296.0 0.8 0.000 592850 NY312175 298.4 0.0 0.000 Thiessen catchment rainfall: 141.1 mm (= sum of weight x gauge total) largest single weight 9.0%, smallest 0.00% === Step 5: Thiessen vs arithmetic mean vs IDW, and sensitivity === arithmetic mean of the 18 gauges inside: 167.4 mm IDW (power 2, 500 m grid, 9,072 cells, all 47 gauges): 160.3 mm Thiessen: 141.1 mm leave-one-out Thiessen (drop each contributing gauge in turn): 139.7 to 144.7 mm biggest change from dropping 604742 (+3.6 mm) half the gauges (200 random draws of 23): 5th-95th percentile 133.9 to 158.8 mm rain volume over the catchment: 321 million m3 in 28 days === figures, part 1 === === Step 6: Cumbria fire stations from OpenStreetMap === Cumbria (Cumberland + Westmorland and Furness): 6,825 km2 amenity=fire_station objects in the Geofabrik extract: 41 removed n986915522: former Ulverston station (The Ellers), replaced by the Blue Light Hub in 2021 removed 1 airport fire service (fire_station:type=airport, Walney airfield) names added for 13 features mapped without one inside Cumbria after merging duplicates within 150 m: 38 stations names: Alston, Ambleside, Appleby, Arnside, Aspatria, Barrow, Bootle, Brampton, Broughton, Carlisle East, Carlisle West, Cockermouth, Coniston, Egremont, Frizington, Grange, Kendal, Keswick, Kirkby Lonsdale, Kirkby Stephen, Lazonby, Longtown, Maryport, Millom, Milnthorpe, Patterdale, Penrith, Seascale, Sedbergh, Shap, Silloth, Staveley, Ulverston, Walney, Whitehaven, Wigton, Windermere, Workington [timer] stations: 0.9 s === Step 7: Voronoi 'nearest station' areas === Voronoi cell area: median 155 km2, smallest 13 km2 (Walney), largest 486 km2 (Brampton) === Step 8: drive network and network-nearest station === drive graph: 28,724 nodes, 66,211 edges [timer] drive graph: 34.6 s travel times from 38 stations to 28,724 nodes: 1,091,512 values [timer] dijkstra: 0.2 s === Step 9: output areas and population === 1,742 output areas in Cumbria, population 499,363 output areas whose Voronoi station is not their quickest station by road: 82 (4.7%), 24,090 people (4.8%) extra drive time if sent to the Voronoi station instead: median 1.1 min, 95th percentile 17.1 min, max 18.6 min people with more than 5 extra minutes: 4,680 drive time to the quickest station, population-weighted: median 3.5 min; share within 10 min 97.8%, within 20 min 100.0% Voronoi cell of Carlisle East: 4,521 people are quicker to reach from another station Voronoi cell of Millom: 4,075 people are quicker to reach from another station Voronoi cell of Barrow: 3,529 people are quicker to reach from another station area where the Voronoi cell and the network service area agree: 77.8% of the county === figures, part 2 === colours needed so that no two neighbouring cells match: 4 [timer] total: 49.6 s