LDP Hackday: Source Cooperative & CNG

Cloud Object Data Publishing

Tyler Erickson

Hi!

  • I’m Tyler
  • A member of the CNG community
  • Recently joined Radiant Earth

Radiant.Earth

Source Cooperative

Why Cloud Object Storage?

  • Commodity infrastructure
  • Accessible at Scale
  • Performant
  • Cost effective (for highly accessible hosting)
  • Standardized API (S3-compatible)

Why Source?

  • Source Cooperative (aka Source) handles the cloud infrastructure complexity
    … of multiple cloud providers
  • Run by a non-profit
    • w/ non-profit governance, incentives
    • Focus on long-term scientific data hosting

Source Cooperative Docs

CNG community

Why CNG Formats?

  • Takes advantage of Web standards to provide highly efficient access to geospatial data

CNG Format Examples:

  • In general, CNG formats include specs for both metadata and data storage.
  • Format specs and conventions are open,community-driven, and evolving


CNG Format Data type
Cloud-optimized GeoTIFF Multiple rasters
Zarr N-dimensional data
Cloud-optimized Point Cloud Point clouds
PMTiles Visualization tiles
Parquet Columnar data (w/ geospatial)

Example (Historical Data)

Open the GEFS analysis dataset

import xarray as xr

ds = xr.open_zarr("https://data.dynamical.org/noaa/gefs/analysis/latest.zarr")

Plot precipitation over time for Berkeley, CA

ds["precipitation_surface"].sel(
    latitude=37.8715618,
    longitude=-122.2682569,
    method="nearest"
).plot()

View temperature for the western US on April 10th, 2026

ds["temperature_2m"].sel(
    time="2026-04-10T03:00",
    latitude=slice(50, 30),
    longitude=slice(-130, -110),
).plot()

Example (Forecast Data)

Open the GEFS analysis dataset

import xarray as xr

ds = xr.open_zarr("https://data.dynamical.org/noaa/gefs/forecast-35-day/latest.zarr")

Plot ensemble forecast for precipitation for Berkeley, CA

plot_ds = ds.sel(
    init_time="2026-04-10T00",
    latitude=37.8715618, longitude=-122.2682569,
    method="nearest"
)
_ = plot_ds["precipitation_surface"].plot(x="valid_time", hue="ensemble_member")

Where to next?


Thank You!



QR code for github.com/tylere/LDP-Hackday

github.com/tylere/LDP-Hackday