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.
- 🌍 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
| Endpoint | Qué Te Da | Cuándo Usarlo |
|---|---|---|
/locations | Estaciones cercanas a lat/lon con última medición | Encontrar estaciones cerca de tu usuario |
/measurements | Historial de mediciones de una estación | Análisis temporal, gráficas |
/latest | Último valor medido por parámetro | Dashboard 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}
23Al 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:
- 📖 OpenAQ Documentation - Referencia completa de la API
- 🎮 OpenAQ Explorer - Explora estaciones en mapa interactivo
- 📊 OpenAQ Data Format - Estructura de respuestas JSON
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
| Variable | Por Qué Importa | Cómo Usarla |
|---|---|---|
| Temperatura | T° > 28°C + sol → formación de O₃ | Alertas de ozono en tardes calurosas |
| Velocidad del viento | < 2 m/s → acumulación de contaminantes | Explicar por qué AQI alto a pesar de poco tráfico |
| Dirección del viento | Transporta plumas de contaminación | Predecir áreas afectadas por incendios |
| Humedad | Alta humedad → partículas crecen (hygroscopic growth) | Ajustar interpretación de PM2.5 |
| Radiación solar | Necesaria para fotoquímica del O₃ | Pronóstico de episodios de ozono |
| Precipitación | Lluvia limpia atmósfera | Explicar 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}
22Combinación Weather + TEMPO + OpenAQ:
- TEMPO detecta NO₂ alto (precursor de O₃)
- Weather muestra T° > 30°C + radiación solar fuerte
- Tu app predice: "O₃ aumentará en próximas 2-4 horas"
- 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.
- 🛰️ 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
| Campo | Qué Significa | Cómo Usarlo |
|---|---|---|
| Latitude/Longitude | Ubicación exacta del incendio | Calcular distancia a tu usuario |
| FRP (Fire Radiative Power) | Intensidad del fuego en MW | Mayor FRP = más humo/contaminación |
| Confidence | Confianza de detección (low/nominal/high) | Filtrar solo 'high' para menos falsos positivos |
| ACQ_DATE/TIME | Cuándo fue detectado | Verificar que sea reciente (< 24h) |
| Bright_ti4 | Temperatura 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}
22Al 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:
- 🗺️ FIRMS Fire Map - Visualizar incendios en mapa interactivo
- 📖 FIRMS Data Guide - Entender los datos y su precisión
- 🔑 Obtener MAP KEY - Registro gratuito para acceso a la API
Resumen: Stack de Datos Recomendado
Para tu aplicación del NASA Space Apps Challenge:
| Fuente | Propósito Principal | Frecuencia de Consulta |
|---|---|---|
| TEMPO | NO₂, O₃, HCHO (cobertura espacial) | Cada hora durante el día |
| OpenAQ | PM2.5 (crítico para AQI) | Cada 30-60 min |
| Weather | Contexto y pronósticos | Cada hora |
| FIRMS | Detección de incendios | Cada 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.