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 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%
