q05·advanced

How is global atmospheric CO₂ changing, and where are the strongest sources?

atmospheregreenhouse-gasescarbon-cycleclimate Datasets: 5 30–90 min
Find the data for your area

Draw a rectangle to pick your area of interest, then see what NASA data covers it (live, here in your browser) or download a ready-to-run notebook with your AOI pre-filled. The notebook runs in any Python environment — it needs a free Earthdata Login to fetch the data.

Current AOI: -95.5, 29.5 → -95, 30 (Houston metro area)

How is global atmospheric CO₂ changing, and where are the strongest sources?

What you can answer

  • Global XCO₂ trend (~2.5 ppm/yr current rate, seasonal cycle, annual growth rate)
  • Regional gradients (highest over Asia industrial corridors, lowest over Southern Ocean)
  • Anthropogenic point sources via OCO-3 SAM mode (megacities, power plants — when sky is clear)
  • Biosphere uptake via SIF (forests vs croplands vs grasslands)
  • El Niño / La Niña impact on tropical land carbon (a major OCO finding)

What you can NOT answer with these alone

  • Direct flux (kg CO₂/sec) — requires inversion via atmospheric-transport model (use OCO MIP).
  • Per-facility emissions without high-fidelity wind + boundary-layer height (use MERRA-2 PBL + 850 hPa winds).
  • Methane, which is on TROPOMI, EMIT, GOSAT, MERLIN — not on OCO sensors.

Code template

import earthaccess
import xarray as xr

earthaccess.login(strategy="netrc")

# Year-scale trend: OCO-2 global XCO2 monthly mean 2015-2025
aoi = None  # global
window = ("2015-01-01", "2025-12-31")
oco2 = earthaccess.search_data(short_name="OCO2_L2_Lite_FP",
                               temporal=window)

# Open all granules, filter by xco2_quality_flag == 0 (good)
# Compute monthly mean per 2°×2° grid → trend line + seasonal harmonic fit

# Facility-scale: OCO-3 SAM over a specific city/plant
sam_aoi = (-95.5, 29.5, -95.0, 30.0)  # Houston area
oco3 = earthaccess.search_data(short_name="OCO3_L2_Lite_FP",
                               bounding_box=sam_aoi,
                               temporal=("2022-01-01", "2024-12-31"))
# Extract XCO2 + wind context from MERRA-2 → enhancement above background

Expected output

  • Global map: 2015 mean XCO₂ minus 2024 mean XCO₂ (annotated with major source regions)
  • Time-series: monthly global XCO₂ 2015–present (showing seasonal cycle + secular rise)
  • Facility raster: OCO-3 SAM mode dense XCO₂ over a megacity, with wind-corrected enhancement overlay
  • SIF map: spring vs fall growing-season comparison for a major biome

Caveats

  • Cloud screening removes 75-90% of footprints. Sparse coverage is the default; aggregate to monthly or coarser.
  • Quality flags are criticalxco2_quality_flag == 0 is the only thing you should trust unfiltered. QF=1 is questionable; QF=2 should be discarded.
  • Bias corrections (v11.2 vs v10) matter for trend analyses spanning the version change.
  • SIF is a photosynthesis proxy, not GPP directly — the relationship varies by ecosystem, water stress, species composition.
  • OCO-3 SAM is scheduler-driven — not every target gets observed on every overpass.

Cross-DAAC composition

GES DISC (OCO-2/3 + MERRA-2) → all via earthaccess with single Earthdata Login.

Sources

Datasets used

📚 Problem Finder KB

Not yet tracked in the KB.