f741a172028534c4b24e5db7b15577a7d81d9051
Changes since last commit: NATS airspace - Remove D and D_OTHER types from parser — UK small-arms ranges covered the entire country and made the layer unusable - Replace title-attribute tooltips on type filters with clickable ⓘ icons (mobile-friendly); info text appears in a shared box below the grid - Add Select All / Deselect All controls (moved to bottom of all layers, now applies to every layer checkbox not just NATS types) - Fix per-type filter using expression syntax ['match', ...] — legacy filter syntax was unreliable in MapLibre GL JS 4.x Map style switching - Fix overlay layers being lost when switching Terrain / Satellite / Streets by waiting for the 'idle' event instead of 'style.load'; MapTiler styles fire style.load before the map is ready to accept addSource/addLayer calls - Defensive cleanup at top of addAllLayers() removes all custom layers and sources before re-adding, preventing "source already exists" crashes Location tracking - Move locate button from floating bottom-right into the left panel - Auto-request location on page load - Dynamic button label: "Getting location…" → "Stop Tracking" → "Track location" - Suppress alert on permission-denied (error code 1); show inline message for other errors Panel UX - Move planning disclaimer out of panel body into a ⚠ icon in the header; click to expand, includes hyperlinked NOTAM link - Add NOTAM link to the data-links section at the bottom - Danger / Restricted and MoD / Military rows now have ⓘ icons explaining that these layers have no built-in data and require a GeoJSON upload; removes the old "Override: load GeoJSON below" note and "(override)" labels from the dropdown - Load Data section: stacked full-width layout (dropdown above button) - Lighten grey text (#555 → #888, #666 → #999) across section labels, layer notes, info icons, hints, data links, and popup close button Map bounds and attribution - Restrict panning to UK + Channel Islands with maxBounds - Replace default attribution control with custom one appending "© Bournemouth Technology" with link to bournemouthtechnology.co.uk README - Add full project description, feature list, tech stack table, setup instructions, and data source reference table
DroneMapUK
A browser-based UK drone airspace planning tool built with MapLibre GL JS. Visualises the airspace restrictions, protected areas, and managed land relevant to UK drone operations in a single interactive map.
Planning aid only. Always verify with official CAA sources and check NOTAMs at aurora.nats.co.uk before any flight.
Features
- NATS AIP Airspace — parses the official NATS AIXM 5.1 XML dataset in a Web Worker (off the main thread) to render Restricted, Prohibited, CTR, CTA, TMA, RAS, and TMZ zones with per-type toggles and colour coding
- Flight Restriction Zones (FRZ) — 5 km radius circles around ~40 UK licensed aerodromes, hardcoded from CAA reference points
- Danger / Restricted Areas — load your own GeoJSON (e.g. converted from NATS ENR 5.1 KMZ)
- MoD / Military Areas — load your own GeoJSON
- National Parks (GB) — fetched automatically from the OS Open Geography Portal ArcGIS REST API
- Royal Parks (London) — 8 London parks with approximate boundaries
- SSSIs — England auto-loaded viewport-lazy from Natural England ArcGIS API (zoom ≥ 8); Scotland/Wales via file upload
- Forestry managed land — load GeoJSON from Forestry England, FLS Scotland, or NRW Wales
- GPS location tracking — live position with accuracy circle, auto-centres on first fix
- Map styles — Terrain, Satellite, Streets (MapTiler)
- 3D terrain — MapTiler terrain-rgb-v2 DEM with pitch and sky layer
- Hillshade overlay — best on Satellite style
How it works
The app is three plain files — index.html, style.css, and app.js — with no build step, no bundler, and no framework.
| Concern | Detail |
|---|---|
| Map rendering | MapLibre GL JS 4.x via CDN |
| Base tiles | MapTiler (requires a free API key) |
| NATS parsing | nats-worker.js Web Worker — receives the 72 MB AIXM XML as an ArrayBuffer, parses GML geometry (GeodesicString, CircleByCenterPoint, ArcByCenterPoint), and posts GeoJSON back to the main thread |
| API key storage | localStorage key droneMapUK_maptilerKey |
| SSSI loading | Viewport-lazy fetch from Natural England ArcGIS FeatureServer, debounced 450 ms on map move |
| National Parks | Single fetch from OS Open Geography Portal on map load |
| Style switching | Uses MapLibre idle event (not style.load) to re-add sources and layers after setStyle() |
Setup
- Get a free API key at maptiler.com
- Serve the directory from a local web server — the NATS XML fetch requires HTTP, not
file://
# Python
python3 -m http.server 8080
# Node
npx serve .
- Open
http://localhost:8080in a browser and enter your MapTiler key when prompted
NATS airspace data
Download the official NATS AIP dataset from nats-uk.ead-it.com and place the extracted XML file at the path referenced in app.js:
EG_AIP_DS_20260514_XML/EG_AIP_DS_FULL_20260514.xml
Update NATS_XML_PATH in app.js if your filename differs.
GeoJSON data sources
| Layer | Source |
|---|---|
| Danger / Restricted | NATS UAS Zones |
| Forestry England | data-forestry.opendata.arcgis.com |
| FLS Scotland | ArcGIS Viewer |
| NRW Wales | datamap.gov.wales |
| SSSIs (Scotland/Wales) | Natural England / Defra Open Data |
Attribution
Map tiles © MapTiler · Data © OpenStreetMap contributors
A Bournemouth Technology product
Description
Languages
JavaScript
66.4%
HTML
17.4%
CSS
16.2%