TEMPO ArcGIS ImageServer - Acceso Eficiente
ArcGIS ImageServer es la forma recomendada de acceder a datos TEMPO para aplicaciones web, sin necesidad de descargar archivos NetCDF completos.
¿Por Qué Usar ImageServer?
Imagina que quieres saber el nivel de NO₂ en Ciudad de México ahora mismo. Tienes dos opciones:
Ventajas clave:
- ✅ Sin descargas - Consultas HTTP directas como cualquier API REST
- ✅ Rápido - Respuestas en milisegundos
- ✅ Escalable - Soporta miles de usuarios simultáneos
- ✅ Flexible - Extrae píxeles individuales, áreas, o renderiza mapas completos
- ✅ Sin procesamiento - NASA hace el trabajo pesado del lado del servidor
Ideal para: Dashboards, apps móviles, visualizaciones en tiempo real
Entendiendo el Servicio
URLs Base
Cada producto TEMPO tiene su propio servicio ImageServer:
Base: https://gis.earthdata.nasa.gov/image/rest/services
NO₂: /C3685896708-LARC_CLOUD/TEMPO_NO2_L3_V04.../ImageServer
O₃: /C3685896625-LARC_CLOUD/TEMPO_O3TOT_L3_V04.../ImageServer
HCHO: /C3685897141-LARC_CLOUD/TEMPO_HCHO_L3_V04.../ImageServer
Explorar servicios disponibles: Earthdata GIS Portal - Navega todos los servicios de imágenes TEMPO disponibles
Estructura del Servicio
Cada servicio ImageServer proporciona metadatos y operaciones:
| Recurso | Qué Te Da | URL |
|---|---|---|
| Info del servicio | Descripción, cobertura temporal, bandas disponibles | /ImageServer?f=json |
| Identify | Extraer valor de un píxel específico | /ImageServer/identify |
| ExportImage | Renderizar mapa como imagen PNG/JPG | /ImageServer/exportImage |
| GetSamples | Extraer múltiples píxeles en una llamada | /ImageServer/getSamples |
Operación Principal: Identify
Qué hace: Extrae el valor de un píxel específico dado lat/lon.
Parámetros Clave
| Parámetro | Qué es | Ejemplo |
|---|---|---|
geometry | Coordenadas geográficas | {"x": -99.1332, "y": 19.4326} |
geometryType | Tipo de geometría | "esriGeometryPoint" |
mosaicRule | Qué hacer si hay múltiples imágenes | {"mosaicMethod": "esriMosaicCenter"} |
returnGeometry | ¿Devolver geometría? | false (no la necesitas) |
f | Formato de respuesta | "json" |
Ejemplo Conceptual
1// Concepto de alto nivel - NO código completo
2async function obtenerNO2EnPunto(lat, lon) {
3 // 1. Construir URL del servicio
4 const url = SERVICIO_TEMPO_NO2 + '/identify';
5
6 // 2. Preparar parámetros
7 const params = {
8 geometry: { x: lon, y: lat },
9 geometryType: 'point',
10 formato: 'json'
11 };
12
13 // 3. Hacer request
14 const respuesta = await fetch(url + '?' + parametrosAString(params));
15 const datos = await respuesta.json();
16
17 // 4. Extraer valor
18 return {
19 no2: datos.value,
20 unidad: 'molec/cm²',
21 timestamp: Date.now()
22 };
23}
24Respuesta Típica
1{
2 "value": 5.2e15,
3 "location": {
4 "x": -99.1332,
5 "y": 19.4326
6 },
7 "name": "TEMPO_NO2_TROPOSPHERIC",
8 "properties": {
9 "AcquisitionDate": "2025-10-02T14:00:00Z",
10 "QualityFlag": 0
11 }
12}
13Al implementar Identify:
- ✅ Quality Flag: Filtra valores con flag > 1 (baja calidad)
- ✅ Valores nulos: Maneja casos donde
valuees null (sin datos) - ✅ Unidades: NO₂/HCHO en molec/cm², O₃ en DU (Dobson Units)
- ✅ Timestamp: Usa
AcquisitionDatepara saber cuándo fue la medición - ✅ Cobertura de nubes: Si
cloud_fraction> 0.7, datos poco confiables
Operación 2: ExportImage - Renderizar Mapas
Qué hace: Genera una imagen PNG/JPG del producto TEMPO sobre un área geográfica.
Cuándo Usarla
- Mostrar mapa de NO₂ sobre México en tu dashboard
- Overlay de contaminación en mapa interactivo (Leaflet, Mapbox)
- Generar visualizaciones para reportes
Parámetros Principales
| Parámetro | Qué es | Valor Típico |
|---|---|---|
bbox | Área geográfica (west, south, east, north) | -118,14,-86,33 (México) |
size | Dimensiones de imagen en píxeles | 800,600 |
format | Formato de imagen | png o jpg |
f | Formato de respuesta | image (devuelve imagen directamente) |
Concepto de Uso
1// Idea conceptual
2function generarMapaNO2SobreMexico() {
3 // 1. Definir área de interés
4 const bbox = {
5 west: -118, south: 14,
6 east: -86, north: 33
7 };
8
9 // 2. Construir URL
10 const url = SERVICIO_TEMPO_NO2 + '/exportImage';
11 const params = {
12 bbox: `${bbox.west},${bbox.south},${bbox.east},${bbox.north}`,
13 size: '1024,768',
14 format: 'png'
15 };
16
17 // 3. Usar URL directamente en <img> o mapa
18 return url + '?' + convertirParams(params);
19}
20
21// Uso en HTML/React
22<img src={urlImagenTEMPO} alt="NO₂ sobre México" />
23Para Leaflet/Mapbox:
- Genera URL con
exportImage - Crea ImageOverlay con esa URL
- Establece bounds (coordenadas geográficas del bbox)
- Ajusta opacidad (~0.6) para ver mapa base
Resultado: Capa de TEMPO sobre tu mapa interactivo que se actualiza cada hora.
Ejemplo: TEMPO ArcGIS Map Viewer - Ve cómo se visualizan los datos
Filtrado Temporal con MosaicRule
Problema: ImageServer puede tener datos de múltiples días/horas. ¿Cómo obtienes datos de un momento específico?
Solución: mosaicRule con cláusula where.
Ejemplo de Filtro Temporal
1// Concepto: Obtener datos de una fecha específica
2const mosaicRule = {
3 mosaicMethod: 'esriMosaicCenter',
4 where: "AcquisitionDate >= '2025-10-02 00:00:00' AND AcquisitionDate <= '2025-10-02 23:59:59'"
5};
6Métodos de mosaico comunes:
esriMosaicCenter: Usa imagen más cercana al centro del bboxesriMosaicNorthwest: Prioriza esquina noroesteesriMosaicAttribute: Ordena por atributo (ej. fecha más reciente)
Consideraciones Importantes
1. Sin Autenticación para Consultas
ImageServer NO requiere autenticación para operaciones identify y exportImage.
Solo necesitas Earthdata token si:
- Descargas archivos NetCDF completos
- Accedes a productos restringidos
- Necesitas rate limits más altos
Para el Challenge: Puedes usar ImageServer sin autenticación.
2. Rate Limits
| Tipo de acceso | Requests/segundo | Recomendación |
|---|---|---|
| Sin autenticación | ~10 req/s | Suficiente para MVP |
| Con Earthdata token | ~20-50 req/s | Para apps en producción |
Mitigación: Implementa caching (60 min) - los datos TEMPO se actualizan cada hora.
3. Valores Fuera de Rango
¿Qué hacer si no hay datos?
1// Concepto de manejo de errores
2async function obtenerDatosTEMPOConFallback(lat, lon) {
3 const resultado = await queryImageServer(lat, lon);
4
5 if (!resultado || resultado.value === null) {
6 // Posibles razones:
7 // - Fuera de cobertura TEMPO
8 // - Hora nocturna (TEMPO solo 8-22h)
9 // - Nubes muy densas
10 // - Error de servidor
11
12 return {
13 exito: false,
14 razon: 'Datos no disponibles',
15 sugerencia: 'Intenta con hora diferente o usa datos de OpenAQ'
16 };
17 }
18
19 return { exito: true, datos: resultado };
20}
214. Interpretación de Valores
| Producto | Unidad | Valor Típico | Valor Alto |
|---|---|---|---|
| NO₂ | molec/cm² | 2-8 × 10¹⁵ | > 1 × 10¹⁶ |
| O₃ Total | DU (Dobson Units) | 250-350 DU | > 400 DU |
| HCHO | molec/cm² | 5-15 × 10¹⁵ | > 3 × 10¹⁶ |
TEMPO mide columna vertical completa, no concentración a nivel del suelo.
- Columna alta ≠ Necesariamente peligroso para salud
- Necesitas OpenAQ para concentración superficial
- Usa TEMPO para contexto espacial y temporal
Recursos para Aprender Más
Documentación oficial:
- 📖 ArcGIS ImageServer API Reference - Documentación completa de todas las operaciones
- 🔧 Earthdata GIS Services - Portal con todos los servicios disponibles
Herramientas interactivas:
- 🗺️ TEMPO ArcGIS Viewer - Explora datos visualmente para entender qué información está disponible
- 🎮 ArcGIS REST Services Directory - Navega la estructura de servicios
Ejemplos prácticos:
- 💻 ASDC Data Services GitHub - Ejemplos de código de NASA para acceder a TEMPO
Resumen: ImageServer vs CMR
| Aspecto | ImageServer | CMR + NetCDF |
|---|---|---|
| Velocidad | < 1 segundo | 5-10 minutos |
| Facilidad | HTTP request simple | Requiere software especializado |
| Uso de datos | Solo lo que necesitas | Descarga todo (500+ MB) |
| Ideal para | Apps web, dashboards | Análisis científico offline |
| Autenticación | No requerida | Requerida para descarga |
Usa ImageServer para tu app del NASA Space Apps Challenge:
- Más rápido para prototipos
- No requiere infraestructura compleja
- Escala mejor para usuarios reales
- Ideal para dashboards y visualizaciones
Usa CMR + NetCDF solo si:
- Necesitas análisis científico profundo
- Quieres procesar históricos completos
- Desarrollas algoritmos personalizados
Próximos Pasos
En la siguiente lección aprenderás:
- Autenticación con Earthdata (opcional pero útil)
- Caching estratégico para optimizar performance
- Manejo de errores y datos faltantes de forma robusta
- Rate limiting y mejores prácticas
- Arquitectura de producción para tu app
Estas prácticas convertirán tu prototipo en una aplicación profesional lista para usuarios reales.