GNSS interference has moved from a niche concern to a routine operational issue for civil aviation. EASA updated its Safety Information Bulletin on GNSS outages and alterations in July 2024, stating that spoofing is riskier for air operations than jamming and noting cases of crews reacting to false terrain-warning pull-up alerts4Source 4 · EASA, 2024EASA updates Safety Information Bulletin on global navigation satellite system outages and alterationseasa.europa.eu. In March 2026, EASA and EUROCONTROL published a joint European action plan to keep operations safe during GNSS interference6Source 6 · EUROCONTROL and EASA, 2026European Aviation Action Plan for Ensuring Safe Operations during GNSS Interferenceseurocontrol.int. Official reporting is the reference, but it is periodic. Open ADS-B data lets analysts see daily patterns, and it is the basis of the GNSS layer in Kimo Defense Intelligence.
§01What are NIC and NACp?
Both are produced by the aircraft's navigation system and travel with position data (NIC is derived from the type code plus supplement bits). When a GNSS receiver loses satellite lock or detects inconsistent measurements, these values drop, often all the way to 0. That is what makes them such a useful sensor: thousands of aircraft act as a moving, self-reporting monitoring network. Researchers at Stanford have used NIC as a proxy for GNSS reception quality precisely because ADS-B carries no direct signal metrics3Source 3 · Liu, Lo, Blanch, Chen, Walter — NAVIGATION (Institute of Navigation), vol. 72 no. 3, 2025Locating GNSS interference sources using ADS-B with non-linear least squaresnavi.ion.org.
| NIC | Containment radius (Rc) | How we read it |
|---|---|---|
| 11 | < 7.5 m | Normal |
| 10 | < 25 m | Normal |
| 9 | < 75 m | Normal |
| 7–8 | up to 0.2 NM (7) | Normal, lower bound |
| 1–6 | larger radii | Degraded |
| 0 | Unknown | Severely degraded or lost |
Why 7? Under 14 CFR § 91.227, aircraft must maintain NIC of at least 7 in normal operation, which corresponds to a containment radius below 0.2 NM, so anything lower indicates degraded GNSS reception3Source 3 · Liu, Lo, Blanch, Chen, Walter — NAVIGATION (Institute of Navigation), vol. 72 no. 3, 2025Locating GNSS interference sources using ADS-B with non-linear least squaresnavi.ion.org. In the same work, the authors treat NIC 0 as received interference above their tolerance threshold and NIC 1 to 6 as moderate interference3Source 3 · Liu, Lo, Blanch, Chen, Walter — NAVIGATION (Institute of Navigation), vol. 72 no. 3, 2025Locating GNSS interference sources using ADS-B with non-linear least squaresnavi.ion.org. We use the same cut points in Kimo's default model, and expose them as parameters.
§02How do you turn aircraft reports into an interference map?
Scroll sideways to see the full diagram.
The public reference for this method is GPSJam (opens in a new tab), which aggregates ADS-B position reports from community receiver networks over 24 hours and colors hexagons by the share of aircraft reporting low navigation accuracy: green where more than 98% reported good accuracy, yellow where 2% to 10% reported low accuracy, red where more than 10% did2Source 2 · GPSJam.orgGPSJam FAQgpsjam.org. Its FAQ also describes subtracting one from the bad-aircraft count before computing the percentage, which suppresses false positives in cells crossed by very few aircraft2Source 2 · GPSJam.orgGPSJam FAQgpsjam.org. GPSJam classifies aircraft on NACp2Source 2 · GPSJam.orgGPSJam FAQgpsjam.org; Kimo's model follows the same logic but defaults to NIC, as the Stanford work does, because NIC is available with every position message while NACp is broadcast less often3Source 3 · Liu, Lo, Blanch, Chen, Walter — NAVIGATION (Institute of Navigation), vol. 72 no. 3, 2025Locating GNSS interference sources using ADS-B with non-linear least squaresnavi.ion.org. Both fields are supported.
- Step 1:
Keep position reports with quality fields
You need decoded NIC and/or NACp. Note that the OpenSky REST state vectors do not include them5Source 5 · OpenSky NetworkOpenSky REST API documentationopenskynetwork.github.io, so use a receiver feed or a historical dataset that preserves decoded ADS-B messages. The ADS-B ingestion guide shows both paths.
- Step 2:
Bin positions into hexagonal cells
Hexagons have uniform neighbor distances and tile the globe cleanly. We default to H3 resolution 4 for regional views and 5 for local ones; coarser cells mean more aircraft per cell and steadier percentages.
- Step 3:
Classify each aircraft once per cell per day
For each aircraft in a cell, take the median NIC across its reports there. If the median is below 7 the aircraft counts as degraded, otherwise as good. One aircraft, one vote.
- Step 4:
Compute a sparse-safe share
Apply the minus-one correction and a minimum of five distinct aircraft per cell before publishing a value. Cells under the minimum are shown as "insufficient traffic", never as green.
- Step 5:
Publish daily, compare to baseline
Store each day's cell values and compare them with the trailing 28-day baseline, so recurring hot spots and new ones are visibly different.
Degraded share=max(degraded aircraft − 1, 0) ÷ (good aircraft + degraded aircraft)
- degraded aircraft
- Distinct aircraft whose median NIC in the cell that day was below 7
- good aircraft
- Distinct aircraft whose median NIC was 7 or higher
with per_aircraft as (
select date_trunc('day', ts) as day,
h3_latlng_to_cell(lat, lon, 4) as cell,
icao24,
percentile_cont(0.5) within group (order by nic) as median_nic
from adsb_positions
where nic is not null
and on_ground = false
group by 1, 2, 3
)
select day, cell,
count(*) filter (where median_nic >= 7) as good,
count(*) filter (where median_nic < 7) as degraded,
greatest(count(*) filter (where median_nic < 7) - 1, 0)::float
/ count(*) as degraded_share
from per_aircraft
group by day, cell
having count(*) >= 5;- Degraded share
- 28-day baseline
Reading a red cell: a worked example
Suppose a cell saw 46 distinct aircraft yesterday, 9 of them with a median NIC below 7. The corrected share is (9 − 1) ÷ 46 ≈ 17%, which puts it in the high band. Before anyone reacts, the drill-down answers three questions. Were the degraded aircraft spread across operators and types, or concentrated in one fleet (which would point to avionics)? Did degradation cluster at certain altitudes or on certain routes? And is the cell new, or has it been elevated for weeks? A cell that is high today but at baseline yesterday, across many operators, is the pattern worth reporting. A cell where one airframe type accounts for every degraded aircraft is usually a data-quality note.
§03Does the map show jamming or spoofing?
EASA defines jamming as intentional radio-frequency interference that prevents GNSS receivers from locking onto satellite signals, and spoofing as broadcasting counterfeit satellite signals that make receivers compute incorrect position, navigation and timing7Source 7 · EASAGlobal Navigation Satellite System outages and alterationseasa.europa.eu. A degraded-NIC map is primarily a jamming-like signal: the receiver knows it is in trouble and says so.
Spoofing is harder. A spoofed receiver may report a confident, high-NIC position that is simply wrong. EASA explicitly calls spoofing harder to detect4Source 4 · EASA, 2024EASA updates Safety Information Bulletin on global navigation satellite system outages and alterationseasa.europa.eu. Open data can still surface symptoms, for example positions that jump far from the previous point, or ADS-B positions that disagree with independent MLAT positions for the same aircraft. In Kimo we model those as separate anomaly layers with their own confidence and never merge them silently into the NIC map.
§04What are the limits and false positives?
- The map shows where aircraft were affected, not where a source is. Interference reaches aircraft at altitude over long distances, so affected cells can be far from any emitter. Kimo stays at area-level mapping for awareness.
- No traffic, no data. Closed airspace, oceans and remote areas produce empty cells. Empty is not the same as clean.
- Avionics differences. Some airframes report low integrity values for reasons unrelated to interference, such as equipment configuration. Per-aircraft voting and minimum counts reduce their weight; a "chronic offender" list removes the rest.
- Ground and low-altitude reports. Surface positions and aircraft near the ground behave differently; exclude
on_groundrows by default. - Feed composition changes. If a receiver network adds coverage in a new area, the denominator changes. Compare against baselines from the same feed mix.
§05How the GNSS layer works in Kimo
The GNSS interference monitor template ships the model above: a positions source, a gnss_daily_cells model with configurable thresholds, a map layer on the Map view, and an alert when a cell exceeds both 10% and three times its baseline on two consecutive days. The detection guide walks through tuning. The same tracks power the Airspace view, so an analyst can click a red cell and see which (simulated) flights crossed it, with their NIC traces.
Frequently asked questions
Can ADS-B data detect GPS jamming?
Indirectly, yes. Aircraft broadcast NIC and NACp values that drop when their GNSS receiver is degraded. When many aircraft in the same area report degraded values on the same day, interference is the most likely explanation.
What NIC value indicates GNSS interference?
A common threshold is NIC below 7, because US rules require NIC 7 or better (a containment radius under 0.2 NM) in normal operation. NIC 0 indicates severe degradation or loss.
Why count aircraft instead of messages?
Aircraft broadcast positions about twice per second, so one aircraft lingering in an area would dominate a message count. Classifying each aircraft once per cell per day gives every aircraft equal weight.
Can this method detect spoofing?
Not reliably on its own, because a spoofed receiver may report a confident but wrong position. Spoofing symptoms such as implausible jumps or disagreement with MLAT positions need separate anomaly checks.
Does OpenSky provide NIC and NACp?
Not in its REST state vectors. You need a source of decoded ADS-B messages, such as your own receivers or a dataset that preserves the quality fields.
Sources
7 references- The 1090 Megahertz Riddle: Uncertainty, accuracy and integrity (opens in a new tab)Junzi Sun, TU Delft (mode-s.org)mode-s.org
NIC and NACp tables and containment radii.
- GPSJam FAQ (opens in a new tab)GPSJam.orggpsjam.org
Daily hexagon aggregation, NACp-based classification, 2%/10% thresholds, minus-one correction.
- Locating GNSS interference sources using ADS-B with non-linear least squares (opens in a new tab)Liu, Lo, Blanch, Chen, Walter — NAVIGATION (Institute of Navigation), vol. 72 no. 32025navi.ion.org
NIC as a proxy for GNSS reception (broadcast with every position, unlike NACp); NIC ≥ 7 normal-operation requirement under 14 CFR 91.227.
- EASA updates Safety Information Bulletin on global navigation satellite system outages and alterations (opens in a new tab)EASA2024easa.europa.eu
SIB 2022-02R3: spoofing riskier than jamming; false TAWS pull-up warnings.
- OpenSky REST API documentation (opens in a new tab)OpenSky Networkopenskynetwork.github.io
State vector fields (no NIC/NACp in state vectors).
- European Aviation Action Plan for Ensuring Safe Operations during GNSS Interferences (opens in a new tab)EUROCONTROL and EASA2026eurocontrol.int
- Global Navigation Satellite System outages and alterations (opens in a new tab)EASAeasa.europa.eu
Definitions of jamming and spoofing; affected FIRs; operator recommendations.
External sources were accessed at the time of writing. Kimo product details, customers and figures in examples are illustrative unless a source is cited.
- #GNSS
- #ADS-B
- #Interference
Writes about ADS-B, Airspace, OSINT, GNSS.
Kimo people and customers mentioned are illustrative; example charts use simulated data unless a source is cited. All aircraft data shown in Kimo is simulated.


