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

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

Note

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 data
  • rasterio: 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 dimensions
  • summaries: Describes available data variables

Rendering Configuration

  • renders: Defines visualization parameters for each variable
  • colormap_name: Specifies color scheme for visualization
  • rescale: Sets data range for color mapping
  • resampling: 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=blues

Statistical 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.0

Support

For assistance with Titiler-CMR integration:

  1. Review the Titiler-CMR examples
  2. Check existing VEDA data configurations
  3. Open an issue in the veda-data repository
  4. Contact the VEDA team for complex integration requirements