=== versions === python 3.12.0 | GDAL 3.13.3 | numpy 2.5.4 | matplotlib 3.11.2 | pystac-client 0.9.0 === Step 1: Scout Moor turbines from OpenStreetMap === turbines: 26 | E 382070..384848 | N 416758..419274 wind farm centre E 383550 N 418030 | nearest-neighbour spacing 281..495 m === Step 2: Copernicus DEM GLO-30 from the Planetary Computer === grid 2068 x 2068 cells of 30 m | elevation 1.0..634.5 m turbine base elevation (GLO-30): 352..472 m, tips at 452..572 m 30 km study circle: 2,828 km2 === Step 3: single-turbine viewshed with gdal.ViewshedGenerate === turbine T7 at E 383329 N 417967, base 401 m, observer = blade tip 100 m GDAL viewshed: 0.20 s | tip visible from 758 km2 = 26.8% of the 30 km circle === Step 4: a numpy line-of-sight viewshed (ray casting) === numpy viewshed: 0.82 s | tip visible from 759 km2 agreement with GDAL: 98.50% of cells, Cohen's kappa 0.962 | numpy-only 21.7 km2, GDAL-only 20.6 km2 === Step 5: earth curvature and refraction === 5 km: curvature drop 2.0 m | with refraction (k=1/7) 1.7 m 10 km: curvature drop 7.8 m | with refraction (k=1/7) 6.7 m 20 km: curvature drop 31.4 m | with refraction (k=1/7) 26.9 m 30 km: curvature drop 70.6 m | with refraction (k=1/7) 60.5 m flat earth (0) visible 802.5 km2 | 25.7% of the 20-30 km ring curvature only (1) visible 750.3 km2 | 23.3% of the 20-30 km ring curvature + refraction (0.857) visible 757.9 km2 | 23.6% of the 20-30 km ring === Step 6: cumulative viewshed (ZTV) from all 26 turbines === 52 viewsheds in 2.1 s at least one blade tip 1017 km2 36.0% at least one hub 918 km2 32.5% blade tips only, no hub 99 km2 3.5% all 26 tips 504 km2 17.8% no part of any turbine 1810 km2 64.0% turbines visible at named places (2 m eye height, GLO-30 surface): place km tips hubs Manchester Town Hall 19.9 0 0 Bury 7.9 25 23 Rochdale 7.8 24 17 Bolton 14.8 26 7 Oldham 16.0 0 0 Ramsbottom 4.5 13 9 Edenfield 3.9 8 6 Rawtenstall 5.3 0 0 Burnley 14.6 0 0 Blackburn 18.3 0 0 Peel Monument 6.0 26 26 Winter Hill 17.8 26 26 === Step 7: line-of-sight profiles === T1 tip -> Manchester Town Hall: 18.7 km | BLOCKED | tightest point 18.33 km from the turbine, sightline -6.8 m above the curvature-corrected ground | curvature + refraction at the viewer 23.5 m T22 tip -> Peel Monument: 4.7 km | VISIBLE | tightest point 4.67 km from the turbine, sightline +3.1 m above the curvature-corrected ground | curvature + refraction at the viewer 1.5 m === Step 8: bare-earth DTM versus surface DSM (Environment Agency LiDAR, 2 m) === grid 4000 x 4000 cells of 2 m | no data: DTM 0.00%, DSM 0.00% turbines inside the LiDAR window: 26 of 26 DSM - DTM within 12 m of each turbine (the tower in the DSM): median 60.1 m, max 65.7 m; reset to the DTM cells more than 2.5 m above ground (trees, buildings): 9.3% 52 LiDAR viewsheds in 10.9 s all cells : >=1 tip visible on DTM 81.7% | on DSM 64.7% | mean tips visible 11.6 vs 8.8 open ground only : >=1 tip visible on DTM 83.1% | on DSM 73.5% | mean tips visible 11.9 vs 10.0 Edenfield 1 km2 around (379868, 419380): >=1 tip visible on DTM 90.7% | on DSM (at ground level) 52.6% Ramsbottom 1 km2 around (379169, 416835): >=1 tip visible on DTM 90.7% | on DSM (at ground level) 29.0% figures written to C:\Users\Sean.Blaney\source\tgis-b5-3\tutorial-code\viewshed-analysis-python\output