=== versions === python 3.12.0 | rasterio 1.5.2 (GDAL 3.12.2) | numpy 2.5.4 | scipy 1.18.1 | pandas 3.0.6 | matplotlib 3.11.2 === Meta canopy height tiles === 56,145 tiles in the global index (zoom-9 QuadKeys) AOI lon/lat bounds: -2.5817, 51.7782, -2.5232, 51.8145 tiles intersecting the AOI: ['031313102']; QuadKey computed from the AOI centre: 031313102 chm/031313102.tif: 65536 x 65536 px, uint8, pixel 1.1943 m, tiled=False, block (1, 65536), nodata=None CRS: EPSG:3857 (Web Mercator); origin x -313086.1, y 6809622.0 read window 5547 x 5561 px; heights 0..37 m Web Mercator pixel 1.194 m on the map = 0.739 m on the ground at 51.80 N imagery dates in tile 031313102: 13 footprints, 2017-05-07 .. 2018-10-10 imagery date(s) under the AOI: ['2018-05-14'] === ETH Global Canopy Height 2020 === N51W003 tile: 36000 x 36000 px of 0.00008333 deg, EPSG:4326, nodata=255.0, overviews [2, 4, 8, 16, 32, 64] ETH pixel on the ground: 5.7 m east-west x 9.3 m north-south === Environment Agency LiDAR: DSM - DTM === one WCS tile: 1000 x 1000 px, float32, EPSG:27700, nodata -3.4e+38 grid: 4000 x 4000 px of 1 m, origin E 360000 N 213000 DTM 51.0..200.0 m; DSM 51.2..237.6 m; no data: 0.00% raw DSM - DTM: min -1.46 m, max 49.09 m, 0.00% below -0.5 m, 0 px above 50 m pits: in 10 m cells whose p95 is >= 15 m, 13.2% of 1 m pixels are < 2 m before pit filling and 7.4% after pit-filled LiDAR CHM: mean 12.98 m, canopy >= 2 m on 78.3% of the AOI, p95 28.3 m, p99 33.5 m, max 49.1 m === CRS alignment onto the British National Grid === Meta resampled to 1 m BNG (average): (4000, 4000), NaN 0.00% ETH resampled to 10 m BNG (nearest): (400, 400), NaN 0.62% co-registration: RMSE 7.23 m as aligned; lowest 6.77 m when Meta is moved +0 m east and -5 m north (positive = east/north) === pixel-wise comparison with the LiDAR CHM === comparison n bias_m mae_m rmse_m r2 mean_lidar_m mean_product_m Meta 1 m vs LiDAR 1 m 16000000 -0.61 5.30 7.24 0.46 12.98 12.37 Meta 1 m vs LiDAR 1 m, no pit filling 16000000 1.12 6.05 8.15 0.35 11.25 12.37 Meta 1 m vs LiDAR 1 m, LiDAR >= 5 m 11415934 -2.42 5.67 7.26 0.21 17.74 15.32 Meta 10 m mean vs LiDAR 10 m mean 160000 -0.61 4.17 5.57 0.59 12.98 12.37 Meta 10 m p95 vs LiDAR 10 m p95 160000 -3.45 5.34 7.05 0.59 18.47 15.02 ETH 10 m vs LiDAR 10 m p95 159003 3.28 6.17 8.09 0.45 18.57 21.85 Meta 10 m p95 vs LiDAR p95, LiDAR >= 5 m 139874 -4.10 5.80 7.40 0.37 20.92 16.82 ETH 10 m vs LiDAR p95, LiDAR >= 5 m 139683 1.71 5.00 6.49 0.33 20.93 22.64 === error by LiDAR height (saturation of tall canopy) === mean product - LiDAR (m) by LiDAR height bin: product ETH 10 m Meta 1 m Meta 10 m p95 lidar_bin_m 0-2 +15.14 +3.61 +0.74 2-5 +13.53 +4.84 +1.60 5-10 +10.41 +3.42 +1.76 10-15 +7.84 +1.29 +0.49 15-20 +4.42 -1.85 -1.65 20-25 +0.76 -5.02 -4.16 25-30 -2.47 -8.88 -7.37 30-35 -7.08 -13.12 -12.18 35-50 -11.68 -17.33 -15.95 LiDAR pixels >= 30 m: 3.27% of the AOI; LiDAR p99.9 38.0 m; Meta max 37 m; ETH max 34 m === error by distance to the canopy edge === signed distance: negative = metres outside the LiDAR canopy (>= 2 m), positive = inside it signed_distance_m n bias_m mae_m lidar_mean_m meta_mean_m < -10 575362 -0.10 0.11 0.11 0.01 -10..-5 542710 0.25 0.55 0.17 0.42 -5..-2 1038932 3.11 3.37 0.23 3.34 -2..0 1322683 7.00 7.28 0.56 7.56 0..2 986570 2.63 6.15 6.72 9.35 2..5 2487908 -1.46 6.21 13.43 11.97 5..10 3420543 -2.35 5.79 17.51 15.17 10..20 3478231 -1.90 5.23 18.70 16.80 > 20 2147061 -3.10 5.50 19.35 16.26 === height classes === area (ha) per height class: product LiDAR 1 m Meta 1 m ETH 10 m class <2 m open 348.0 267.9 3.4 2-5 m shrub 110.4 78.5 2.0 5-10 m 219.5 200.9 19.3 10-20 m 453.5 790.8 339.3 20-30 m 416.3 261.4 1219.2 >=30 m 52.3 0.5 6.8 same class as LiDAR: Meta 1 m 46.1% of pixels; 10 m p95 classes: Meta 47.5%, ETH 49.1% Meta 1 m class within one class of LiDAR: 84.4% === figures === wrote 01-meta-tile-index.png, 02-canopy-height-maps.png, 03-hexbin-comparison.png, 04-difference-maps.png, 05-saturation-and-edges.png, 06-height-classes.png