TEMPO CMR API - Búsqueda y Descubrimiento
La CMR (Common Metadata Repository) es el catálogo oficial de NASA donde puedes buscar y descubrir qué datos TEMPO existen y dónde descargarlos.
¿Qué es CMR y Cuándo Usarla?
Piensa en CMR como la biblioteca de NASA:
- 📚 Catálogo: Lista todos los datasets disponibles (Collections)
- 📖 Fichas bibliográficas: Metadatos de cada archivo (Granules)
- 🔍 Sistema de búsqueda: Encuentra datos por fecha, ubicación, producto
CMR NO contiene los datos reales, solo información sobre dónde encontrarlos y descargarlos.
CMR vs ImageServer: Cuándo Usar Cada Uno
| Necesitas... | Usa | Por qué |
|---|---|---|
| Valor de un píxel ahora | ImageServer | Más rápido (< 1s) |
| Mapa para visualizar | ImageServer | No requiere descarga |
| Saber qué archivos existen | CMR | Es su propósito principal |
| Descargar NetCDF completo | CMR | Te da la URL de descarga |
| Análisis científico offline | CMR → NetCDF | Acceso a todos los metadatos |
La mayoría de apps usan ImageServer, no CMR.
Usa CMR solo si:
- Necesitas descargar archivos completos para análisis offline
- Quieres saber exactamente qué datos históricos existen
- Desarrollas pipelines de procesamiento batch
Para dashboards web: Usa ImageServer (lección anterior).
Estructura: Collections y Granules
Collection (Colección)
Qué es: Un dataset completo (ej. "TEMPO NO₂ Versión 4").
Metadatos que proporciona:
- Cobertura geográfica y temporal
- Resolución espacial
- Variables disponibles
- Formato de archivos (NetCDF)
- Versión del producto
Collection IDs importantes:
| Producto | Collection ID V04 | Qué Mide |
|---|---|---|
| NO₂ | C3685896708-LARC_CLOUD | Columna troposférica de dióxido de nitrógeno |
| O₃ | C3685896625-LARC_CLOUD | Columna total de ozono |
| HCHO | C3685897141-LARC_CLOUD | Columna vertical de formaldehído |
V04 es la versión más reciente (2024) con:
- Mejor calibración
- Algoritmos mejorados
- Mayor precisión
Usa V03 solo para comparar con estudios históricos.
Granule (Granulo)
Qué es: Un archivo NetCDF individual que contiene datos de una hora específica.
Ejemplo: TEMPO_NO2_L2_V04_2025100214_001.nc
- Producto: NO₂ L2
- Versión: V04
- Fecha/hora: 2025-10-02 a las 14:00 UTC
- Archivo: 001
Metadatos que proporciona cada granule:
- Tiempo de adquisición exacto
- Bounding box geográfico
- URL de descarga del archivo NetCDF
- Tamaño del archivo
- Checksum (para verificar integridad)
Cómo Buscar Datos con CMR
Endpoint Base
https://cmr.earthdata.nasa.gov/search/granules.json
Parámetros de Búsqueda Comunes
| Parámetro | Qué Hace | Ejemplo |
|---|---|---|
collection_concept_id | Filtra por producto TEMPO | C3685896708-LARC_CLOUD (NO₂) |
temporal | Filtra por rango de fechas | 2025-10-01T00:00:00Z,2025-10-02T23:59:59Z |
bounding_box | Filtra por área geográfica | -99.3,19.2,-98.9,19.6 (CDMX) |
page_size | Cuántos resultados por página | 100 (máximo) |
sort_key | Cómo ordenar resultados | -start_date (más recientes primero) |
Ejemplo Conceptual: Buscar Datos de Hoy
1// Concepto - NO código completo
2async function buscarGranulesDeHoy(producto) {
3 // 1. Construir URL base
4 const url = 'https://cmr.earthdata.nasa.gov/search/granules.json';
5
6 // 2. Definir parámetros
7 const params = {
8 collection_concept_id: obtenerCollectionID(producto),
9 temporal: `${hoy_00:00},${hoy_23:59}`,
10 page_size: 100,
11 sort_key: '-start_date' // Más recientes primero
12 };
13
14 // 3. Hacer request
15 const respuesta = await fetch(url + '?' + construirQuery(params));
16 const datos = await respuesta.json();
17
18 // 4. Extraer información útil
19 return datos.feed.entry.map(granule => ({
20 hora: granule.time_start,
21 downloadURL: granule.links.find(l => l.rel === 'data').href,
22 tamaño: granule.granule_size
23 }));
24}
25Respuesta Típica de CMR
1{
2 "feed": {
3 "entry": [
4 {
5 "id": "G12345678-LARC_CLOUD",
6 "title": "TEMPO_NO2_L2_V04_2025100214_001",
7 "time_start": "2025-10-02T14:00:00.000Z",
8 "time_end": "2025-10-02T15:00:00.000Z",
9 "links": [
10 {
11 "rel": "http://esipfed.org/ns/fedsearch/1.1/data#",
12 "href": "https://asdc.larc.nasa.gov/data/.../file.nc"
13 }
14 ],
15 "boxes": ["-168 14 -13 73"],
16 "granule_size": "523.4"
17 }
18 ]
19 }
20}
21Información clave:
time_start: Cuándo fue la observaciónlinks[].href: URL para descargar el NetCDFboxes: Cobertura geográfica [west south east north]granule_size: Tamaño en MB
Casos de Uso de CMR
1. Descubrir Qué Datos Históricos Existen
Pregunta: "¿Tiene NASA datos TEMPO del 15 de julio 2024?"
1// Búsqueda conceptual
2buscarEnCMR({
3 producto: 'NO2',
4 fecha: '2024-07-15'
5});
6
7// Resultado: Lista de granules disponibles ese día
8// Cada hora de 8 AM a 10 PM = ~14 granules
92. Obtener URLs de Descarga
Caso: Quieres descargar archivos NetCDF para procesar offline.
1// Concepto
2const granules = await buscarEnCMR({ producto: 'NO2', fecha: 'hoy' });
3
4granules.forEach(g => {
5 console.log(`Hora: ${g.hora}`);
6 console.log(`Descargar: ${g.downloadURL}`);
7 console.log(`Tamaño: ${g.tamaño} MB`);
8});
93. Verificar Última Observación Disponible
Caso: Saber si hay datos nuevos.
1// Concepto
2async function obtenerUltimaObservacion(producto) {
3 const granules = await buscarEnCMR({
4 producto,
5 ordenar: 'más-reciente-primero',
6 limite: 1
7 });
8
9 return granules[0]; // El más reciente
10}
11Limitaciones y Consideraciones
Limitaciones de CMR:
- ❌ NO extrae valores de píxeles directamente
- ❌ NO renderiza mapas
- ❌ Latencia ~6-12 horas (tiempo que tarda NASA en publicar)
- ❌ Requiere descargar archivos completos (500+ MB)
Para tiempo real: Usa ImageServer (lección anterior).
Latencia de Datos
| Tipo de Producto | Disponibilidad en CMR |
|---|---|
| Near Real-Time (NRT) | 6-12 horas después de observación |
| Standard | 1-3 días (mejor calibración) |
| Re-procesado | Meses después (con algoritmos mejorados) |
Implicación: Si necesitas datos de "ahora mismo", CMR no es la mejor opción.
Recursos para Explorar CMR
Herramientas de búsqueda visual:
- 🔍 Earthdata Search - Interfaz gráfica para buscar datos TEMPO sin escribir código
- 🗺️ Worldview - Visualiza datos TEMPO en mapa global interactivo
Documentación:
- 📖 CMR API Documentation - Referencia completa de todos los parámetros de búsqueda
- 💻 ASDC Data Access - Ejemplos de código de NASA para acceder a TEMPO
Explorar colecciones:
- 📚 TEMPO Collection Browser - Lista de todas las colecciones TEMPO disponibles
Descarga de Archivos NetCDF
Si decides descargar archivos completos, necesitarás:
1. Cuenta Earthdata
Regístrate gratis: https://urs.earthdata.nasa.gov
2. Autenticación
Opción A: Usar .netrc file (recomendado para scripts)
Opción B: Usar token de autenticación en headers
3. Software para Procesar NetCDF
| Lenguaje | Biblioteca | Uso |
|---|---|---|
| Python | xarray, netCDF4 | Análisis científico |
| R | ncdf4, raster | Análisis estadístico |
| JavaScript | netcdfjs | Apps web (raro) |
Ejemplo Conceptual de Descarga
1# Concepto en Python - NO código completo
2import xarray as xr
3
4# 1. Obtener URL de CMR
5url_netcdf = obtener_url_desde_cmr(producto='NO2', hora='2025-10-02T14:00')
6
7# 2. Descargar y abrir con xarray
8ds = xr.open_dataset(url_netcdf)
9
10# 3. Explorar variables
11print(ds.variables)
12# Output: ['NO2_vertical_column', 'latitude', 'longitude', 'quality_flag', ...]
13
14# 4. Extraer dato en lat/lon específico
15no2_value = ds.NO2_vertical_column.sel(
16 latitude=19.43,
17 longitude=-99.13,
18 method='nearest'
19)
20
21print(f"NO₂: {no2_value.values} molec/cm²")
22Procesar NetCDF requiere:
- Conocimiento de formatos científicos
- Bibliotecas especializadas
- Manejo de multidimensionalidad (lat, lon, time, nivel)
- Procesamiento de metadatos complejos
Recomendación: Solo usa NetCDF si realmente lo necesitas. Para la mayoría de apps, ImageServer es suficiente y mucho más simple.
Resumen: CMR vs ImageServer
| Aspecto | CMR | ImageServer |
|---|---|---|
| Propósito | Buscar y descargar archivos | Consultar valores directamente |
| Respuesta | URLs de descarga + metadatos | Valores de datos (JSON) |
| Velocidad | Lento (descargas grandes) | Rápido (< 1 segundo) |
| Uso típico | Investigación científica | Apps web/móvil |
| Complejidad | Alta (requiere procesar NetCDF) | Baja (HTTP + JSON) |
| Mejor para | Análisis offline completo | Dashboards tiempo real |
Para NASA Space Apps Challenge:
- ✅ Usa ImageServer para tu app (lección anterior)
- 📚 Usa CMR solo si necesitas explorar qué datos existen o descargar archivos completos para análisis
El 95% de las apps ganadoras usan ImageServer, no CMR + NetCDF.
Próximos Pasos
En la siguiente lección aprenderás:
- Autenticación con Earthdata (para descargas NetCDF)
- Mejores prácticas de caching y performance
- Manejo de errores robusto
- Rate limiting para no exceder límites
- Arquitectura de producción escalable
Estas técnicas asegurarán que tu app sea rápida, confiable y profesional.