Skip to content

feat: Coverage: per-pixel canopy + building DSM, multi-origin merge#461

Merged
SimmerV merged 12 commits into
MeshAddicts:developfrom
SimmerV:feature-add
May 11, 2026
Merged

feat: Coverage: per-pixel canopy + building DSM, multi-origin merge#461
SimmerV merged 12 commits into
MeshAddicts:developfrom
SimmerV:feature-add

Conversation

@SimmerV
Copy link
Copy Markdown
Collaborator

@SimmerV SimmerV commented May 11, 2026

Summary

  • Canopy DSM — bake ETH global canopy heights to z6-10 PNG tiles; per-pixel heights feed P.833 vegetation loss and replace class-nominal averages. One-command bake + Docker compose profile.
  • Building DSM — bake GHS-BUILT-H (CC-BY-4.0) to PNG tiles; per-pixel heights feed the ITM Longley-Rice profile (mid-path) and override the P.452 endpoint clutter h_a on developed NLCD classes (21/22/23/24). Bare-earth + class-nominal preserved as fallback.
  • 3D buildings (cosmetic) — MapLibre fill-extrusion sourced from OpenFreeMap vector tiles; opt-in toggle, off by default. Pairs visually with the new building RF DSM but ships independently.
  • Multi-origin coverage merge — coverage tool now accepts additional TX origins; per-pixel reduction takes max margin across all origins. Single-origin compute remains byte-identical when the merge set is empty. Worker request shape changed: originorigins: SliceOrigin[].
  • Virtual map-pin merge origins — pick non-node points on the map as merge TX origins. Draggable amber markers, ESC to cancel pick, auto-cancel on tool switch.
  • Recenter suppression — parameter-only coverage recomputes (TX power, antenna, reliability, toggles, detail) no longer pan the view. Only origin moves trigger easeTo.
  • Status chips — per-tool clutter/canopy/buildings tile-coverage indicators in Coverage + Scan panels.

@SimmerV SimmerV self-assigned this May 11, 2026
@SimmerV SimmerV added this to meshinfo May 11, 2026
@SimmerV SimmerV added the enhancement New feature or request label May 11, 2026
@github-project-automation github-project-automation Bot moved this to Backlog in meshinfo May 11, 2026
@SimmerV SimmerV moved this from Backlog to In review in meshinfo May 11, 2026
@daviesgeek daviesgeek requested a review from Copilot May 11, 2026 23:21
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends Meshinfo’s RF coverage/scan pipeline to support optional per-pixel canopy and building height rasters (served as baked PNG tiles), adds a multi-origin “max margin” merge mode for coverage, and introduces an opt-in cosmetic 3D buildings layer in the map UI.

Changes:

  • Add canopy-height (ETH Global Canopy Height 2020) and building-height (JRC GHS-BUILT-H ANBH) tile bake scripts + Docker bake services, plus API mounting and operator docs.
  • Integrate optional canopy/building rasters into scan + coverage (P.833 path vegetation loop, P.452 endpoint clutter override, and ITM DSM mid-path), with UI toggles and tile-coverage status chips.
  • Add multi-origin coverage merging (worker request originorigins) and UI support for adding node or “virtual pin” merge origins.

Reviewed changes

Copilot reviewed 33 out of 33 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
scripts/requirements-canopy.txt Adds standalone Python deps for canopy tile baking.
scripts/requirements-buildings.txt Adds standalone Python deps for building tile baking.
scripts/README-canopy.md Operator guide for canopy bake and tile serving.
scripts/README-buildings.md Operator guide for building bake and tile serving.
scripts/canopy_tiles.py New canopy tile bake script (ETH COG download + reprojection + PNG packing).
scripts/building_tiles.py New building tile bake script (auto-download + extract + reprojection + PNG packing).
RF-MODEL.md Documents canopy/building measured-height tiers and integration points.
frontend/src/pages/map/storage.ts Adds localStorage keys for new toggles (canopy/buildings/3D buildings).
frontend/src/pages/map/scanAnalysis.ts Samples optional canopy/building rasters in scan clutter computation and ITM DSM.
frontend/src/pages/map/MapSettingsPanel.tsx Adds “3D Buildings” toggle alongside terrain.
frontend/src/pages/map/MapScanPanel.tsx Adds canopy/buildings toggles + status chips to Scan panel.
frontend/src/pages/map/MapCoveragePanel.tsx Adds canopy/buildings toggles + status chips and multi-origin merge UI.
frontend/src/pages/map/coverageSliceWorker.ts Worker message shape change (origins) + optional canopy/buildings raster plumbing.
frontend/src/pages/map/coverageRaster.ts Coverage renderer now supports multiple origins + optional canopy/buildings integration.
frontend/src/pages/map/coverageAnalysis.ts Introduces MergeOrigin interface for multi-origin coverage UI.
frontend/src/pages/map/ClutterUI.tsx Adds Canopy/Building status chips and updates legend note.
frontend/src/pages/map/clutterPath.ts Adds canopy/building context plumbing into clutter computation.
frontend/src/pages/map/clutterPath.test.ts Adds tests for canopy/building override behavior.
frontend/src/pages/map/clutterClasses.ts Extends endpoint clutter API to accept an override height.
frontend/src/pages/map/canopyTiles.ts New canopy tile fetch/decode/build raster utilities + LRU.
frontend/src/pages/map/canopyTiles.test.ts Unit tests for canopy tile decoding/sampling/building.
frontend/src/pages/map/buildingTiles.ts New building tile fetch/decode/build raster utilities + LRU.
frontend/src/pages/map/buildingTiles.test.ts Unit tests for building tile decoding/sampling/building.
frontend/src/pages/Map.tsx Wires toggles, raster fetches, merge origins, 3D buildings, and worker requests.
frontend/src/maps/mapStyle.ts Adds OpenFreeMap vector source + fill-extrusion layer for cosmetic 3D buildings.
Dockerfile.landcover Installs libexpat1 for rasterio wheels on slim images.
Dockerfile.canopy Adds canopy bake image + GDAL cache cap.
Dockerfile.buildings Adds building bake image + GDAL cache cap.
docker-compose.yml Adds bake-profile services for canopy/buildings.
docker-compose-dev.yml Adds bake-profile services for canopy/buildings in dev compose.
config.toml.sample Adds [canopy] and [buildings] sections + operator bake commands.
config.py Adds default config entries for canopy/buildings tile mounting.
api/api.py Mounts /tiles/canopy and /tiles/buildings when enabled and directories exist.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread scripts/canopy_tiles.py Outdated
Comment thread scripts/building_tiles.py Outdated
Comment thread scripts/README-canopy.md
@SimmerV SimmerV merged commit 79a5dd0 into MeshAddicts:develop May 11, 2026
4 checks passed
@github-project-automation github-project-automation Bot moved this from In review to Done in meshinfo May 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants