prop/lib/microwaveprop/rover
Graham McIntire 4f647e7894
feat(canopy): add tree-canopy height layer for path obstruction analysis
Adds Microwaveprop.Canopy module that reads 1° × 1° uint8 per-degree
canopy-height tiles (mirrors SRTM .hgt naming/layout, 30 m resolution).
Returns 0 m for areas with no tile on disk so the lookup is safe to
thread through the existing path-clearance pipeline before any data
lands.

Wires canopy into:
  - PathTerrain.obstacle_top: per-sample blocker = ground +
    max(building_m, canopy_m), so the rover ranks paths through forests
    as obstructed even when no buildings sit on the line
  - CandidateDetail profile: each sample now carries canopy_m alongside
    building_m
  - Rover-detail SVG: green "trees" polygon stacked on terrain, under
    the red building polygon
  - Path calculator elevation chart: green Tree Canopy dataset between
    terrain and buildings

Data prep (download Potapov 2019 / Lang 2022 GeoTIFF, slice to per-degree
uint8 tiles, drop in /data/canopy/) is a separate one-shot operation —
without tiles, lookups return 0 and the existing behavior is unchanged.
2026-04-26 12:51:48 -05:00
..
aggregator.ex feat(rover): pure scoring math (link margin, aggregator, drive time) 2026-04-25 16:26:33 -05:00
candidate_detail.ex feat(canopy): add tree-canopy height layer for path obstruction analysis 2026-04-26 12:51:48 -05:00
compute.ex feat(rover): include step number/total in Calculate progress label 2026-04-26 12:05:32 -05:00
drive_time.ex feat(rover): show aim heading + path lines for each fixed station 2026-04-25 18:10:15 -05:00
elevation.ex feat(rover): score per-station terrain clearance from SRTM path samples 2026-04-25 17:29:29 -05:00
fixed_station.ex feat(rover): FixedStation schema with grid-derived lat/lon 2026-04-25 16:26:33 -05:00
hilltop.ex feat(rover): snap top candidates to SRTM hilltops + add hillshade overlay 2026-04-26 09:12:24 -05:00
link_margin.ex feat(rover): pure scoring math (link margin, aggregator, drive time) 2026-04-25 16:26:33 -05:00
path_terrain.ex feat(canopy): add tree-canopy height layer for path obstruction analysis 2026-04-26 12:51:48 -05:00
prominence.ex feat(rover): prefer broad hilltops near roads as ideal candidates 2026-04-25 17:45:48 -05:00
road_proximity.ex fix(rover): bound Overpass with hard 8s deadline + 6h ETS cache by bbox 2026-04-26 09:25:08 -05:00