Implement story 2.2: coordinate projection and base map loading

Add MapBounds dataclass and equirectangular project() function in
projection.py, basemap.load() forcing pixels into memory via .copy(),
and full test coverage for both modules (4 new tests). All quality
gates pass: 67 tests, ruff clean.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt Edholm
2026-04-22 23:10:38 -04:00
parent f8e763d734
commit 037ce3e193
6 changed files with 107 additions and 37 deletions
@@ -35,7 +35,7 @@
# - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended)
generated: 2026-04-22
last_updated: 2026-04-22 # 2-1 done, 2-2 ready-for-dev, epic-2 in-progress
last_updated: 2026-04-22 # 2-1 done, 2-2 review, epic-2 in-progress
project: planeMapper
project_key: NOKEY
tracking_system: file-system
@@ -54,7 +54,7 @@ development_status:
# Epic 2: Live Radar Display
epic-2: in-progress
2-1-aircraft-data-model-and-fetcher: done
2-2-coordinate-projection-and-base-map-loading: ready-for-dev
2-2-coordinate-projection-and-base-map-loading: review
2-3-home-marker-and-airspace-outlines: backlog
2-4-altitude-colour-bands-and-aircraft-type-icons: backlog
2-5-per-aircraft-drawing: backlog