TEMPO

APIs y Acceso a Datos Complementarios

Ahora que sabes por qué necesitas datos complementarios, aprende qué información proporciona cada API y cómo accederla (a alto nivel).

1. OpenAQ - Estaciones Terrestres de Calidad del Aire

¿Qué es y Qué Ofrece?

OpenAQ es una plataforma open-source que agrega datos de 15,000+ estaciones gubernamentales de calidad del aire en 100+ países.

OpenAQ en Números
  • 🌍 Cobertura: Global (estaciones puntuales)
  • 📊 Parámetros: PM2.5, PM10, NO₂, O₃, SO₂, CO
  • ⏱️ Frecuencia: 10 min - 1 hora (varía por estación)
  • 🔄 Actualización: Tiempo real (< 1 hora de latencia)
  • 💰 Costo: Gratuito
  • 🔑 API Key: Opcional (recomendada para rate limits más altos)

Documentación oficial: OpenAQ API Docs - Guías completas, ejemplos y referencia de endpoints

Datos Que Puedes Obtener

EndpointQué Te DaCuándo Usarlo
/locationsEstaciones cercanas a lat/lon con última mediciónEncontrar estaciones cerca de tu usuario
/measurementsHistorial de mediciones de una estaciónAnálisis temporal, gráficas
/latestÚltimo valor medido por parámetroDashboard en tiempo real

Conceptos Clave para Tu App

1. Radio de búsqueda:

  • Usa 10-25 km para áreas urbanas
  • Usa 50-100 km para áreas rurales
  • Si no hay estaciones cercanas, informa al usuario

2. Promedio de área:

  • Una estación = punto específico
  • Múltiples estaciones = representativo del área
  • Calcula promedio para dar valor más robusto

3. Calidad de datos:

  • Algunas estaciones reportan cada 10 min
  • Otras cada hora
  • Verifica lastUpdated - descarta datos > 3 horas

Ejemplo Conceptual de Uso

1// Idea de alto nivel - NO código completo
2async function obtenerPM25Cercano(lat, lon) {
3  // 1. Buscar estaciones en radio de 25km
4  const estaciones = await buscarEstaciones(lat, lon, 25);
5
6  // 2. Filtrar solo las que tienen PM2.5
7  const conPM25 = filtrarPorParametro(estaciones, 'pm25');
8
9  // 3. Verificar que datos sean recientes (< 3h)
10  const recientes = filtrarPorFecha(conPM25, 3);
11
12  // 4. Calcular promedio
13  const promedio = calcularPromedio(recientes);
14
15  // 5. Retornar con metadatos
16  return {
17    valor: promedio,
18    numeroEstaciones: recientes.length,
19    unidad: 'μg/m³',
20    timestamp: Date.now()
21  };
22}
23
Variables Importantes a Considerar

Al integrar OpenAQ considera:

  • ✅ Distancia de estaciones al punto de interés
  • ✅ Antigüedad de la medición (< 3 horas recomendado)
  • ✅ Número de estaciones (mínimo 2-3 para robustez)
  • ✅ Manejo de casos sin estaciones cercanas
  • ✅ Conversión de unidades si es necesario (μg/m³ vs ppb)

Recursos para aprender más:


2. Weather APIs - Datos Meteorológicos

¿Por Qué Necesitas Datos Meteorológicos?

La meteorología explica los niveles de contaminación y predice su evolución:

Datos Meteorológicos Clave

VariablePor Qué ImportaCómo Usarla
TemperaturaT° > 28°C + sol → formación de O₃Alertas de ozono en tardes calurosas
Velocidad del viento< 2 m/s → acumulación de contaminantesExplicar por qué AQI alto a pesar de poco tráfico
Dirección del vientoTransporta plumas de contaminaciónPredecir áreas afectadas por incendios
HumedadAlta humedad → partículas crecen (hygroscopic growth)Ajustar interpretación de PM2.5
Radiación solarNecesaria para fotoquímica del O₃Pronóstico de episodios de ozono
PrecipitaciónLluvia limpia atmósferaExplicar mejoría súbita de calidad del aire

APIs Recomendadas

Open-Meteo (Recomendada - Sin API Key):

  • Ventaja: Totalmente gratuita, sin límites estrictos
  • Datos: Actuales + pronóstico 7 días
  • Cobertura: Global
  • 🔗 Open-Meteo API - API meteorológica gratuita con pronósticos

OpenWeatherMap (Freemium):

  • Ventaja: Muy popular, bien documentada
  • ⚠️ Limitación: 1,000 llamadas/día gratis
  • 🔗 OpenWeather API - Requiere API key gratuita

NOAA/NWS (Oficial EEUU):

  • Ventaja: Datos oficiales, sin API key
  • ⚠️ Limitación: Solo EEUU bien cubierto
  • 🔗 NOAA Weather API - API oficial del gobierno de EEUU

Ejemplo Conceptual: Evaluar Riesgo de Ozono

1// Concepto de alto nivel
2function evaluarRiesgoOzono(datosMeteo, hora) {
3  // Condiciones favorables para O₃:
4  // - Temperatura alta (> 28°C)
5  // - Horas de máxima radiación solar (12-18h)
6  // - Viento bajo (estancamiento)
7
8  const temperaturaAlta = datosMeteo.temperatura > 28;
9  const horaPico = hora >= 12 && hora <= 18;
10  const vientoBajo = datosMeteo.viento < 3;
11
12  if (temperaturaAlta && horaPico && vientoBajo) {
13    return {
14      riesgo: 'Alto',
15      mensaje: 'Condiciones ideales para formación de ozono',
16      recomendacion: 'Evitar ejercicio al aire libre 14-18h'
17    };
18  }
19
20  // ... otros casos
21}
22
Patrón Recomendado

Combinación Weather + TEMPO + OpenAQ:

  1. TEMPO detecta NO₂ alto (precursor de O₃)
  2. Weather muestra T° > 30°C + radiación solar fuerte
  3. Tu app predice: "O₃ aumentará en próximas 2-4 horas"
  4. OpenAQ confirma con datos de superficie

Este tipo de análisis contextual hace tu app mucho más valiosa.


3. FIRMS - Detección de Incendios

¿Qué es FIRMS?

FIRMS (Fire Information for Resource Management System) es el sistema de NASA para detectar incendios activos desde satélites.

FIRMS en Números
  • 🛰️ Satélites: MODIS (Terra/Aqua) + VIIRS (Suomi NPP, NOAA-20)
  • 📍 Resolución: 375m (VIIRS) - 1km (MODIS)
  • ⏱️ Frecuencia: ~2-4 veces/día por satélite
  • 🔄 Latencia: 3 horas (Near Real-Time)
  • 🌍 Cobertura: Global
  • 🔑 API Key: MAP KEY gratuita (registro requerido)

Documentación: FIRMS API Documentation - Cómo obtener MAP KEY y usar la API

Datos Que Proporciona FIRMS

CampoQué SignificaCómo Usarlo
Latitude/LongitudeUbicación exacta del incendioCalcular distancia a tu usuario
FRP (Fire Radiative Power)Intensidad del fuego en MWMayor FRP = más humo/contaminación
ConfidenceConfianza de detección (low/nominal/high)Filtrar solo 'high' para menos falsos positivos
ACQ_DATE/TIMECuándo fue detectadoVerificar que sea reciente (< 24h)
Bright_ti4Temperatura de brillo (Kelvin)Correlaciona con intensidad

Integración con TEMPO

Flujo de validación cruzada:

Concepto: Evaluación de Impacto

1// Alto nivel - qué considerar
2function evaluarImpactoIncendio(incendios, ubicacionUsuario) {
3  // Variables a considerar:
4  // 1. Distancia: < 50km = alto impacto
5  // 2. FRP total: > 500 MW = severo
6  // 3. Dirección del viento: ¿hacia el usuario?
7  // 4. Número de incendios: múltiples fuegos = peor
8
9  const incendiosCercanos = filtrarPorDistancia(incendios, 100);
10  const frpTotal = sumarFRP(incendiosCercanos);
11  const distanciaMinima = encontrarMasCercano(incendiosCercanos);
12
13  // Categorizar impacto
14  if (frpTotal > 500 && distanciaMinima < 50) {
15    return 'Severo - Evacuación puede ser necesaria';
16  } else if (frpTotal > 200 || distanciaMinima < 100) {
17    return 'Moderado - Permanece en interiores';
18  }
19
20  return 'Bajo - Monitorear';
21}
22
Consideraciones Importantes

Al usar FIRMS en tu app:

  • Distancia: < 50 km = alto impacto, 50-100 km = moderado
  • FRP threshold: > 200 MW total indica impacto significativo
  • Confianza: Usa solo detecciones 'high' confidence
  • Dirección viento: Combina con Weather API para predecir dispersión
  • Validación: Cruza con TEMPO HCHO para confirmar humo
  • ⚠️ Latencia: 3 horas - no es tiempo real absoluto

Recursos útiles:


Resumen: Stack de Datos Recomendado

Para tu aplicación del NASA Space Apps Challenge:

FuentePropósito PrincipalFrecuencia de Consulta
TEMPONO₂, O₃, HCHO (cobertura espacial)Cada hora durante el día
OpenAQPM2.5 (crítico para AQI)Cada 30-60 min
WeatherContexto y pronósticosCada hora
FIRMSDetección de incendiosCada 3-6 horas

Arquitectura Conceptual

Usuario solicita calidad del aire → Tu Backend ↓ ┌──────────────────┼──────────────────┐ ↓ ↓ ↓ TEMPO OpenAQ Weather (NO₂, O₃, HCHO) (PM2.5) (T°, viento) ↓ ↓ ↓ └──────────────────┼──────────────────┘ ↓ Motor de Análisis (combina, calcula AQI, genera alertas) ↓ Respuesta al usuario

Próximos Pasos

En la siguiente lección veremos cómo integrar todas estas fuentes en un sistema coherente:

  • Arquitectura de integración multi-fuente
  • Cómo manejar datos faltantes
  • Estrategias de fallback
  • Generación de insights inteligentes

La clave es combinar estas fuentes para dar contexto completo que ninguna fuente individual puede proporcionar.