=== versions === python 3.12.0 | pyvista 0.49.2 | vtk 9.7.1 | rasterio 1.5.2 | numpy 2.5.4 | gpxpy 1.6.2 | networkx 3.7 | osmium 4.3.2 === Step 1: Environment Agency LIDAR DTM, resampled to 5 m by the WCS === [DEM download and mosaic: 0.1 s] 30 WCS tiles -> grid 1800 x 1500 cells of 5 m (9.0 x 7.5 km), origin 331000 E, 518500 N no-data cells: 0 (0.00%), filled from the nearest valid cell elevation 144.9 to 949.0 m (relief 804 m) | slope median 20.7 deg, 95th percentile 42.3 deg, max 82.1 deg === Step 2: a clear Sentinel-2 scene, reprojected onto the DEM grid === 87 scenes with under 20% tile cloud; 25 summer days. The study area straddles MGRS tiles T30UVF, T30UWF, so each day is mosaicked 2025-05-16: cloud, shadow or no data over the study area 0.60% 2025-05-13: cloud, shadow or no data over the study area 0.00% chosen: 13 May 2025, tiles S2C_MSIL2A_20250513T112131_R037_T30UWF_20250513T135636, S2C_MSIL2A_20250513T112131_R037_T30UVF_20250513T135636; 0.00% cloud or shadow over the study area [Sentinel-2 read and reproject: 2.4 s] reprojected to the DEM grid: 1800 x 1500 cells of 5 m, empty cells 0.00% | the same area in EPSG:32630 (UTM 30N): 911 x 763 pixels of 10 m naive resize vs proper reprojection: mean misplacement 65 m, max 130 m (UTM 30N grid north is rotated against BNG grid north) === Step 3: Glenridding - Striding Edge - Helvellyn - Swirral Edge from OpenStreetMap, as GPX === [read OSM paths: 17.3 s] walkable OSM network: 16,092 nodes, 16,345 segments; named ways found: Swirral Edge, Striding Edge GPX: 683 track points written and read back; densified to 2,237 points every 5 m route length 11.18 km | lowest 156 m, highest 949 m | total ascent 894 m (5-point smoothed LIDAR profile) === Step 4: the DEM as a PyVista StructuredGrid === display DEM: Gaussian sigma 1 cell, mean absolute change 0.37 m, 95th percentile 1.12 m [build grid: 0.1 s] StructuredGrid: dimensions (1500, 1800, 1), 2,700,000 points, 2,696,701 quad cells, 103 MiB texture coordinates: u 0.000-1.000, v 0.000-1.000 as triangles: 5,393,402 triangles === Step 5: texture alignment === === Step 6: vertical exaggeration === exaggeration 1.0x: z range in the scene 804 m against 9,000 m across; 95th percentile slope as drawn 42 deg exaggeration 1.5x: z range in the scene 1,205 m against 9,000 m across; 95th percentile slope as drawn 54 deg exaggeration 3.0x: z range in the scene 2,411 m against 9,000 m across; 95th percentile slope as drawn 70 deg === Step 7: lighting === === Step 8: drape the GPX route and render the final scene === route polyline: 2,237 points -> tube of 178,880 points [final render: 0.2 s] === Step 9: a rotating MP4, embedded in a small HTML page === animation mesh: 675,000 points (every 2nd DEM cell) [render 120 frames: 0.6 s] helvellyn_orbit.mp4: 120 frames at 768 x 432, 8 s, 0.84 MB helvellyn-orbit.html: 1.12 MB