graph LR
A[VEDA Dashboard] --> B[Titiler-CMR API]
B --> C[NASA CMR]
C --> D[External Data Storage]
D --> E[NetCDF Files]
D --> F[COG Files]
D --> G[Zarr Stores]
B --> H[Dynamic Tiles]
B --> I[Statistics API]
B --> J[STAC Metadata]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#fff3e0
style D fill:#f1f8e9
Titiler-CMR Integration
Indexing CMR datasets using Titiler-CMR for dynamic visualization
Titiler-CMR provides a powerful bridge between NASA’s Common Metadata Repository (CMR) and dynamic tile generation for visualization in VEDA. This integration enables access to thousands of CMR-registered datasets without requiring data migration.
Overview
Titiler-CMR extends the TiTiler library to work directly with CMR-registered datasets, providing:
- Dynamic Tile Generation: On-demand tile creation from NetCDF, COG, and Zarr files
- Multi-Backend Support: Supports both xarray (NetCDF/Zarr) and rasterio (COG) backends
- Temporal Queries: Access time series data across dataset granules
- Statistical Analysis: Compute zonal statistics for arbitrary geometries
- STAC Integration: Generate STAC-compliant metadata for external datasets
Architecture
Architecture Overview: VEDA Dashboard connects to Titiler-CMR API, which interfaces with NASA’s CMR to access external data storage containing NetCDF, COG, and Zarr files. Titiler-CMR generates dynamic tiles, provides statistical analysis, and creates STAC-compliant metadata.
Configuration Example: GPM Precipitation
Here’s a real-world example using the GPM IMERG Daily precipitation dataset. The complete configuration is available in examples/gpm-precipitation-config.json.
Collection Configuration
{
"type": "Collection",
"id": "GPM_3IMERGDF",
"stac_version": "1.0.0",
"description": "GPM IMERG Final Daily precipitation estimates",
"collection_concept_id": "C2723754864-GES_DISC",
"cube:dimensions": {
"time": {
"extent": ["1998-01-01T00:00:00Z", null],
"description": "time",
"step": "P1D",
"type": "temporal"
},
"lon": {
"axis": "x",
"extent": [-179.95, 179.95],
"description": "Longitude",
"reference_system": 4326,
"type": "spatial"
},
"lat": {
"axis": "y",
"extent": [-89.95, 89.95],
"description": "Latitude",
"reference_system": 4326,
"type": "spatial"
}
},
"summaries": {
"precipitation": {
"type": "data",
"description": "Daily precipitation rate",
"dimensions": ["time", "lon", "lat"],
"unit": "mm/day",
"attrs": {
"units": "mm/day",
"long_name": "Daily mean precipitation rate"
},
"renders": "precipitation"
}
},
"renders": {
"precipitation": {
"title": "Precipitation",
"resampling": "average",
"colormap_name": "blues",
"rescale": [[0, 48]],
"backend": "xarray"
}
}
}Key Configuration Elements
Backend Selection
xarray: For NetCDF and Zarr datasets with multidimensional datarasterio: For Cloud-Optimized GeoTIFF (COG) files
CMR Integration
collection_concept_id: Links to the CMR collection (e.g., “C2723754864-GES_DISC”)cube:dimensions: Defines spatial and temporal dimensionssummaries: Describes available data variables
Rendering Configuration
renders: Defines visualization parameters for each variablecolormap_name: Specifies color scheme for visualizationrescale: Sets data range for color mappingresampling: Controls how data is aggregated at different zoom levels
API Usage Examples
Tile Generation
Generate dynamic tiles for a specific date and variable:
GET /WebMercatorQuad/tilejson.json?concept_id=C2723754864-GES_DISC&datetime=2024-01-15&backend=xarray&variable=precipitation&rescale=0,50&colormap_name=bluesStatistical Analysis
Compute statistics for a geographic region:
POST /statistics?concept_id=C2723754864-GES_DISC&datetime=2024-01-15&backend=xarray&variable=precipitation
Content-Type: application/json
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[...]]
}
}Time Series Access
Access temporal data across multiple granules:
GET /time-series?concept_id=C2723754864-GES_DISC&datetime=2024-01-01/2024-01-31&backend=xarray&variable=precipitation&lat=40.7&lon=-74.0Support
For assistance with Titiler-CMR integration:
- Review the Titiler-CMR examples
- Check existing VEDA data configurations
- Open an issue in the veda-data repository
- Contact the VEDA team for complex integration requirements