3D Map Explorer overlays controlled airspace and TFRs on the planning map, checks your mission footprint against them, runs a METAR wind gate, and folds in a checklist — then returns one honest verdict: Go, Caution, or No-Go. No separate preflight tool, no browser tab juggling.
The preflight composer (PreflightService) chains four checks. Each can fail gracefully on its own; the verdict assembly never throws, so a downed weather feed degrades to a carried reason instead of a crash.
AirspaceService.Check). No-fly → No-Go; authorization-hard (e.g. LAANC required) → Caution.uas-preflight-checklist; any failed required item is a No-Go.// mission footprint + planned departure { "mission": { "waypoints": [[34.05,-118.25,120]] }, "departureIcao": "KLAX" } → composed verdict { "status": "Caution", "reasons": ["LAANC required: Class-B"], "weather": { "windKt": 8, "flightCat": "VFR" } }
The Airspace module ships a bundled controlled-airspace dataset so the check works air-gapped, and refreshes TFRs when a network is available. The footprint intersection uses the same ring-extraction helper as the rest of the platform.
Class-B/C/D/E surfaces in-box via BundledControlledAirspace — no external tile dependency for the core check.
Active Temporary Flight Restrictions fetched and overlaid; POST /api/airspace/refresh pulls the latest.
Planned footprint (Polygon / LineString / waypoints) tested against airspace rings + max altitude.
Bbox or ICAO-scoped NOTAM fetch; TFR/AIRSPACE classifications gate the verdict.
Nearest METAR; wind limit gate with headwind/crosswind decomposition vs. flight direction.
Reusable FormStore checklist; required-item failures are hard No-Go reasons.
Every endpoint is a thin minimal-API lambda that never throws — failures return a result carrying the degrade reason. Wire your GCS or mission board straight into the verdict.
| Capability | Endpoint | Notes |
|---|---|---|
| Capability discovery | GET /api/preflight/capabilities | Which checks are available / healthy |
| Evaluate verdict | POST /api/preflight/evaluate | Mission footprint + options → composed Go / No-Go |
| NOTAMs | GET /api/preflight/notams | ?bbox or ?icao |
| Weather | GET /api/preflight/weather | Nearest METAR by lat/lon or icao |
| Checklist (get) | GET /api/preflight/checklist | FormStore uas-preflight-checklist definition |
| Checklist (submit) | POST /api/preflight/checklist | Completed items folded into the verdict |
| Airspace features | GET /api/airspace/features | GeoJSON controlled airspace (?bbox) |
| Airspace check | POST /api/airspace/check | Footprint + max altitude → severity + verdict text |
Verdict logic reflects PreflightService.EvaluateAsync and AirspaceService.Check on commit b3726eb60 (feat/preflight-gonogo). LAANC authorization submission (obtaining the actual approval) is Phase-2 — today the verdict flags LAANC required; it does not file the request.
Airspace, NOTAMs, weather, and checklist — composed into a single Go / No-Go, with LAANC-aware cautions where authorization is required.