Lee los datos
Última actualización el
La API pública devuelve los hexágonos que dibuja el mapa, para la última actualización o un día guardado, sin posiciones brutas de aviones. El esquema completo está en OpenAPI 3.1.
Ventana más reciente
GET https://api.gpsinterference.com/v1/interference/latest
GET https://api.gpsinterference.com/interference.json es el mismo documento, que usa el mapa. Contiene un día UTC de vuelos, history_date, y se reconstruye una vez al día hacia las 05:00 UTC.
Un día UTC
GET https://api.gpsinterference.com/v1/interference/YYYY-MM-DD
El mapa tal como estaba en la última actualización de ese día UTC (no un recuento solo de los vuelos de esa fecha), con los mismos campos que el resumen más reciente más archive_date y complete. complete es falso mientras el día siga siendo hoy y puede ser reemplazado; un día terminado nunca cambia. Una fecha sin mapa guardado devuelve 404 y {"error":"no archive"}.
GET https://api.gpsinterference.com/v1/interference/days lista todos los días guardados: date, updated y hexes (un recuento), sin polígonos.
Campos del hexágono
| Campo | Significado |
|---|---|
h | Id de celda, column_row en la cuadrícula hexagonal Web Mercator. |
g | Aviones distintos en la celda cuyo NACp se mantuvo por encima de 7. |
b | Aviones distintos que informaron NACp 7 o menos al menos una vez en la celda. |
p | Proporción afectada, en porcentaje, con un decimal: 100 × b ÷ (g + b). El color se toma de esta cifra. |
c | g por debajo del 3 %, y del 3 % al 10 %, r por encima del 10 %, tomado del p redondeado. |
poly | Anillo de pares [latitude, longitude], en grados. |
Las celdas son hexágonos planos en la cuadrícula Web Mercator con un radio de 0,34° de longitud (unos 38 km del centro a la esquina en el ecuador, 22 km a 54°N). Se omiten las celdas con menos de 3 aviones.
bands (resúmenes desde noviembre de 2026) divide los mismos recuentos por altitud barométrica: edges_ft es [5000, 15000, 30000] y hexes contiene cuatro listas, para por debajo de 5.000 ft, 5.000–15.000 ft, 15.000–30.000 ft y por encima de 30.000 ft. Cada entrada es { h, g, b }, con el polígono y la proporción tomados del hexágono del mismo h en la lista principal (p = 100 × b ÷ (g + b), los mismos umbrales para c). Una banda omite las celdas con menos de 3 aviones en esa banda. Un avión que cambia de banda dentro de una celda se cuenta en cada una, así que las cuatro bandas no suman los recuentos principales; los aviones en tierra o sin altitud solo están en los recuentos principales.
Campos de nivel superior: history_date es el día UTC de los vuelos; updated es cuándo se escribió el resumen (UTC); grid es mercator-r0.34; window_minutes es 1440, un día; sources es adsb.lol-globe-history más la versión de adsb.lol con la que se construyó, como adsb.lol-prod-0. A los resúmenes guardados antes de noviembre de 2026 puede faltarles history_date y llevan polled_points, grid_points y failed_points de la antigua recogida en vivo.
Caché, CORS y límites
El resumen más reciente, el día guardado de hoy y el índice de fechas se envían con cache-control: public, max-age=60. Un día terminado se envía con max-age=86400.
El CORS del navegador solo se permite para https://gpsinterference.com y https://www.gpsinterference.com, así que otro sitio web no puede leer el JSON desde los navegadores de sus visitantes; curl y las peticiones desde servidor no se ven afectados. No hay un límite de frecuencia fijo, pero las peticiones muy frecuentes pueden ser limitadas. Los datos cambian una vez al día, así que sigue las cabeceras de caché en lugar de consultar sin parar.
Atribución
Datos de aeronaves del historial global de adsb.lol, compartidos bajo la Open Database License (ODbL). Cita https://gpsinterference.com. Una baja precisión informada no es una interferencia confirmada y no identifica una fuente. Los mosaicos del mapa base son aparte y no forman parte de esta API.
Citar los datos
Cita el día guardado que usaste: el mapa más reciente cambia cada día, pero un día guardado no.
APA
GPSInterference.com. (2026). GPS interference hexagon data [Data set]. https://gpsinterference.com/docsUn día guardado:
GPSInterference.com. (2026). GPS interference hexagon data, 25 October 2026 [Data set]. https://api.gpsinterference.com/v1/interference/2026-10-25BibTeX
@dataset{gpsinterference_2026,
author = {{GPSInterference.com}},
title = {GPS Interference Hexagon Data},
year = {2026},
publisher = {GPSInterference.com},
url = {https://gpsinterference.com/docs},
note = {Built from ADS-B flight tracks from adsb.lol globe history, available under the Open Database License (ODbL). Low reported accuracy (NACp 7 or lower) is not confirmed jamming. For one UTC day, use https://api.gpsinterference.com/v1/interference/YYYY-MM-DD}
}Ejemplos
curl -sS "https://api.gpsinterference.com/v1/interference/latest"
curl -sS "https://api.gpsinterference.com/v1/interference/2026-10-25"
En JavaScript, en este sitio o en un servidor:
const res = await fetch("https://api.gpsinterference.com/v1/interference/latest");
if (!res.ok) throw new Error(String(res.status));
const data = await res.json();
// data.hexes[i] is { h, g, b, p, c, poly }
La metodología explica cómo se hacen los recuentos.
Incrustar el mapa
El mapa en vivo es libre de incrustar. Pega esto donde deba aparecer:
<iframe src="https://gpsinterference.com/embed" width="640" height="400"
style="border:0;width:100%;max-width:960px" loading="lazy"
title="Live GPS interference map"></iframe>
<p>Live map: <a href="https://gpsinterference.com/">GPS Interference</a></p>Configúralo abajo y copia el código, o añade tú mismo las opciones.
Opciones
Añade cualquiera de estas a https://gpsinterference.com/embed, unidas con &:
| Opción | Valores | Qué hace |
|---|---|---|
region | baltic-sea, eastern-europe, black-sea, eastern-mediterranean, middle-east, east-asia, finland, estonia, latvia, lithuania, kaliningrad, poland, norway, romania, turkey, cyprus, israel, lebanon, south-korea, north-korea, japan, china, taiwan, philippines, vietnam, sweden, denmark, germany, iceland, united-kingdom, ukraine, belarus, moldova, bulgaria, georgia, armenia, azerbaijan, greece, egypt, iran, iraq, syria, jordan, saudi-arabia, united-arab-emirates, qatar | Se abre en esa región, ajustada al tamaño del marco. |
bbox | south,west,north,east | Se abre en cualquier zona, en grados, por ejemplo bbox=30,-120,40,-105. |
lat, lon, zoom | números | Se abre en un centro y un zoom en lugar de una zona. |
lock | 1 | Mantiene a los lectores dentro de la zona: pueden desplazarse y hacer zoom dentro de ella, pero no alejarse. |
style | dark (por defecto), light, streets, satellite | El mapa sobre el que se asientan los hexágonos: oscuro, un mapa claro y limpio para páginas blancas, calles, o satélite con fronteras y nombres de lugares. Mapas de MapTiler. |
lang | auto, en, no, uk, pl, tr, es, fr, de | El idioma del texto del mapa: auto usa el idioma del navegador del lector, o indica un código. Sin él, inglés. Las páginas de región usan su propio idioma. |
names | on, off (por defecto) | Nombres de lugares en el mapa. |
alt | all (por defecto), low, mid, high, cruise | Muestra solo los aviones de una banda de altitud: por debajo de 5.000 ft, 5.000–15.000 ft, 15.000–30.000 ft o por encima de 30.000 ft (barométrica). Los días guardados antes de registrar altitudes muestran todos los aviones. |
controls | on | Muestra los interruptores de estilo, nombres y altitud, para que los lectores puedan cambiarlos. |
date | YYYY-MM-DD | Muestra un día guardado en lugar del mapa más reciente, para una historia sobre ese día. |