feat: Coverage: per-pixel canopy + building DSM, multi-origin merge#461
Merged
Conversation
Contributor
There was a problem hiding this comment.
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
origin→origins) 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
origin→origins: SliceOrigin[].