Frequently Asked Questions
Answers to the most common questions about the GeoVeil platform, GNSS interference monitoring, and data interpretation.
GeoVeil is a real-time GNSS interference monitoring platform (GPS, Galileo, GLONASS) for the ROMPOS system — Romania's national CORS positioning network. The platform is developed by the National Centre for Cartography (CNC), an institution within ANCPI (the National Agency for Cadastre and Land Registration).
The platform collects, analyses and visualises RF interference data from 83 stations with spectrum-analysis capability (out of 86 active ROMPOS stations), providing automatic spoofing detection and ML forecasts of future activity.
Every ROMPOS station with spectrum-analysis capability continuously streams ITDETECTSTATUSA and SPECTRUMANALYSIS data over TCP. GeoVeil connects asynchronously to all 83 monitored stations, parses the data in real time and stores it in PostgreSQL.
After every insert, an analysis engine evaluates 7 indicators for spoofing detection. Data is available for visualisation and API queries with a latency of a few seconds.
The web interface and read APIs are publicly accessible, no authentication required. The displayed data comes from the ROMPOS system — public infrastructure operated by ANCPI through CNC.
Administrative features (data deletion, model retraining) are protected by a dashboard password.
Simple Mode shows the station map, interference charts (V1 polar + V2 timeline), systematic statistics, cross-station correlations and VADASE data.
Advanced Mode additionally exposes:
- Threats tab — panoramic view of spoofing analysis for every station
- Predictor tab — 24h ML forecast with probability and per-RF-band predictions
- Spoofing tab in the station panel — 7-indicator radar chart + threat table
- Prediction tab in the station panel — probability gauge + hourly forecast
GNSS interference is any radio signal that disturbs the reception of satellite positioning signals (GPS, Galileo, GLONASS). It can be accidental (electronic equipment, TV/radio transmitters) or deliberate (jammers, spoofers).
Effects include: loss of positioning fix, position errors, accuracy degradation, up to complete inability to receive.
These are the frequency bands on which GNSS satellites broadcast their signals:
- L1 (1575.42 MHz) — the primary GPS band, by far the most used, including civilian (smartphones, automotive)
- L2 (1227.60 MHz) — the secondary GPS band, used for dual-frequency ionospheric correction
- L5 (1176.45 MHz) — civil safety-of-life band, used by Galileo and GPS Block III
- E1 (1575.42 MHz) — primary Galileo band, spectrally co-located with GPS L1
ROMPOS stations monitor all of these bands simultaneously, with up to 20 MHz of analysis bandwidth per band.
The estimated power loss (dBm) reflects how much an interference affects the useful satellite signal. The values are negative (in dBm):
- 0 dBm — minimal / negligible degradation
- -20 to -40 dBm — moderate interference
- -40 to -60 dBm — significant interference, may affect accuracy
- < -60 dBm — severe interference, possible loss-of-lock
In the V1 polar chart, power-loss vectors are drawn radially — the longer the vector, the stronger the interference.
Colours reflect interference activity during the last hour (refreshed every 60 seconds):
- ● Red — active interference detected within the last hour (marker-active)
- ● Green — online, no recent interference (marker-idle)
- ● Grey — data unavailable / station offline
The ROMPOS system consists of 86 active CORS stations (Continuously Operating Reference Stations), distributed across the whole of Romania — roughly 2–3 stations per county. Of these, 83 stations are equipped with spectrum-analysis capability and are monitored by GeoVeil for GNSS interference. 74 stations hold a VADASE licence for positional displacement analysis.
The spectrum-capable stations are equipped with NovAtel OEM7 multi-constellation, multi-frequency receivers, capable of simultaneously monitoring GPS, Galileo, GLONASS and BeiDou.
The side panel shows up to 6 tabs for the selected station:
- Graph — V1 polar chart (hourly/spectral distribution) and/or V2 timeline + last-hour data
- Statistics — systematic per-band statistics (V1): occurrences, CF min/max, BW, PL
- Correlated — events correlated with other stations (V1 + V2 combined)
- VADASE — East/North/Up positional displacements (74 stations with licence, V1 data)
- Spoofing *(Advanced)* — 7-indicator radar chart + threat type / severity table
- Prediction *(Advanced)* — probability gauge + 24h hourly forecast
The Spoofing and Prediction tabs are only available in Advanced Mode.
V1 Classic (api.geoveil.ro/v2/v1) — the original API, with Romanian field names (BandaRF, Frecv_cent_MHz, DataOra). Provides the polar chart (hourly distribution on a 24h dial), systematic statistics, correlations and VADASE data.
V2 Live (api.geoveil.ro/v2) — the modern API with standardised field names (rfpath, centfreq_mhz, datetime). Provides chronological timeline, real-time data (last hour), spoofing analysis, aggregate analytics and ML prediction.
You can pick Both to display V1 polar and V2 timeline simultaneously inside the station panel.
No. All read endpoints are public and don't require authentication. You can query them directly from a browser, cURL or any programming language.
curl "https://api.geoveil.ro/v2/lh"
All responses are JSON. Timestamps are ISO 8601 UTC. Frequencies in MHz, bandwidths in MHz, power loss in dBm.
See the API Docs page for the full schema of each endpoint.
Yes — read endpoints are rate-limited per source IP. Specific limits and the 429 response are documented in API Docs → Rate limits. For heavy use, recommendations:
- Leave at least 500 ms between requests
- Use
/analyticsfor global stats instead of 83 individual requests - Use
/lh/summaryfor recent data (returns all stations in one shot)
The live (V2) stream covers interference data starting 26 May 2026 — a new high-resolution collection system gathering ~340,000 events/day and growing. For deeper historical perspective, the classic (V1) API offers an archive of 549,182 records (up to the end of May 2026) across the 83 stations.
The live archive grows continuously as new station data flows in.
GNSS spoofing means broadcasting fake signals that mimic the satellite signals, in order to trick a GNSS receiver into computing a wrong position or time. It is much more sophisticated than jamming (which simply blocks the signal).
Possible impacts: aircraft, vessels or vehicles arriving at the wrong destination; disruption of critical infrastructure that depends on GNSS timing (telecoms, power grids).
Meaconing is a form of passive spoofing: the real satellite signals are received, delayed and re-emitted at higher power. The GNSS receiver "sees" the same signals but with an artificial delay — leading to position errors proportional to the introduced delay.
It is harder to detect than active spoofing because the signals are authentic (not generated artificially), but the timing is altered.
The engine evaluates every interference event across 7 independent dimensions, computing a 0–1 score per dimension:
- Temporal — time clustering (spoofing signals come in bursts)
- Spatial — geographic spread (spoofing affects multiple stations simultaneously)
- Multi-band — simultaneous activity across multiple RF bands (characteristic of sophisticated spoofing)
- PSD — spectral power density anomaly vs baseline
- Correlation — similarity with events detected at other stations in the same window
- Frequency pattern — concentration on exact GNSS frequencies (vs. accidental more diffuse interference)
- Temporal drift — change in event parameters over time
The weighted average score yields the classification: spoofing_candidate, matched_spectrum, meaconing or clean.
Confidence (0–1) is how certain the classification is: 0.9+ means all 7 indicators agree; 0.5 means inconclusive.
Severity (LOW / MEDIUM / HIGH) reflects the potential impact on GNSS operations:
- HIGH — interference that can cause loss of fix or significant position errors
- MEDIUM — perceptible accuracy degradation, but the positioning solution holds
- LOW — minor impact, within normal operating tolerances
spoofing_candidate deserves immediate investigation by ROMPOS operators.GeoVeil offers two prediction models, selectable from the Predictor interface:
- V1 — Classic (currently recommended): LightGBM (gradient boosting) trained on the historical archive of 549,182 records across the 83 stations. Accuracy: ~82 %, AUC-ROC: 0.91. A mature, stable model validated over years of data.
- V2 — Live: a model under continuous retraining on the new high-resolution live dataset (~340,000 events/day since 26 May 2026). As the data volume grows, V2 accuracy improves progressively.
Both models use tabular features (hour, day, month, station coordinates, baseline) plus lag features (recent station activity) to predict interference probability for upcoming hours.
A 73 % probability means the model estimates there is a 73 % chance that at least one interference event will occur during that hour at the selected station, based on historical patterns (hour, day-of-week, location, prior activity).
It is not a guarantee — interference also has a random component (unpredictable external sources). The predictor is useful for planning critical measurements or proactive alerting.
The LightGBM model retrains automatically 60 seconds after server startup. Training takes ~30 s. Once done, the LSTM kicks off automatically (~5–10 minutes).
Manual retraining can be triggered via POST /api/predict/retrain. Current training state is available at GET /api/predict/status.
For reliable predictions right now, we recommend the V1 — Classic model. It is trained on the complete historical archive (549,182 records) and delivers stable, validated results.
The V2 — Live model is currently retraining on the new high-resolution live dataset and improving its accuracy as more data accumulates. You can select it from the Predictor's Model dropdown, but until it matures, V1 stays the recommended choice.
ROMPOS (Romanian Positioning System) is the national network of permanent GNSS reference stations, operated by ANCPI through the National Centre for Cartography (CNC). It provides real-time (RTK) and post-processed (RINEX) corrections for precision applications: surveying, cadastre, construction, geodesy.
The system consists of 86 active stations distributed across the whole of Romania (average density ~1 station per ~3,000 km²), of which 83 have interference-analysis capability and 74 have VADASE licences.
Official information: rompos.ro
Interferences can degrade or break the RTK (Real-Time Kinematic) solution, reducing precision from centimetres to tens of centimetres or even full fix-loss.
GeoVeil lets surveyors:
- Determine whether a fix problem is caused by interference at the reference station
- Pick hours / days with minimal interference for critical measurements (using the Predictor)
- Correlate field issues with the database events
ROMPOS stations use GR50 receivers with AR20 and AR25 geodetic GNSS antennas. Spectral analysis comes from the NovAtel OEM7 Interference Toolkit (ITK), which samples the RF spectrum across the GNSS bands (L1, L2, L5, L-band) and reports Power Spectral Density (PSD) in dBm/Hz.
The noise floor is the reference background-noise level — the power below which a signal cannot be distinguished from noise. The fundamental physical limit is thermal noise, −174 dBm/Hz (kT at 290 K). After amplification through the active antenna LNA and the receiver RF chain (~30 dB gain on L1), the effective noise floor shown by the analyzer sits around −144 dBm/Hz.
ITK compares the received spectrum against an interference-free reference calibrated at receiver startup; any significant rise above the noise floor is flagged as a possible interference event.
Reference: NovAtel OEM7 Interference Toolkit.
- Backend: Flask + asyncio (Python), Gunicorn, PostgreSQL (~340,000 events/day, growing)
- ML: LightGBM, PyTorch LSTM, scikit-learn (CV, calibration, ROC)
- Frontend: Vanilla JS + Plotly.js + Leaflet.js (no UI framework)
- Proxy: Caddy (automatic HTTPS, reverse proxy)
- Infra: Docker Compose, Ubuntu Server
Yes. The interface is mobile-first: below 768 px the station panel becomes a bottom sheet (slides up from the bottom), navigation collapses into a hamburger, map controls compact.
Plotly.js charts are responsive (auto-resize). The Leaflet map fully supports touch.
Use the contact form or write directly to hi@geoveil.ro with a description of the issue, the exact URL, and a screenshot if possible.
For API issues, please include the cURL request that reproduces the problem.