q18·intermediate

How much of my region's water supply is locked in snow, and is the snowpack shrinking?

cryospherehydrologywater-resources Datasets: 5 15–30 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: -120.6, 36.4 → -118.2, 39.3 (Sierra Nevada (California snow-fed basins))
On this page

How much of my region’s water supply is locked in snow, and is the snowpack shrinking?

What you can answer

  • Snow-covered area (SCA) for any AOI, daily at 500 m, from MODIS/VIIRS NDSI snow cover
  • Seasonal snow accumulation and melt curve — when snow peaks (typically ~April 1 in the Sierra) and when it disappears
  • Snow-cover duration trends — is the snow-on/snow-off season getting shorter across the record?
  • Snow-line elevation shifts — by combining NDSI snow cover with a DEM, where the persistent snow line sits each year
  • Relative year-over-year comparison — this year’s peak SCA and melt-out date vs the 2000–present climatology

What you can NOT answer with these datasets alone

  • Snow water equivalent (SWE) in mm directly from MODIS/VIIRS — optical sensors see extent, not depth or water content. SWE needs passive microwave (AMSR2/SMAP, coarse ~10–25 km), Daymet (model-based, North America only), airborne lidar (ASO), or ground stations (SNOTEL).
  • Snow under dense forest canopy — optical NDSI is blinded by canopy; microwave and modeled products fill this gap with their own large uncertainties.
  • Cloud-obscured days — MODIS/VIIRS see nothing through cloud. You must gap-fill (Terra+Aqua merge, temporal compositing) and honestly flag interpolated days.
  • The actual deliverable runoff volume — converting SWE to streamflow needs a hydrologic model plus sublimation, soil moisture, and routing; snow data is an input, not the answer.

Code template (Python, cloud-direct)

import earthaccess
import xarray as xr
import numpy as np
import rioxarray  # for NDSI raster reads via GDAL/HDF-EOS

earthaccess.login(strategy="netrc")

# AOI: Sierra Nevada (California snow-fed basins) — [W, S, E, N]
aoi = (-120.6, 36.4, -118.2, 39.3)
water_year = 2025  # Oct 2024 – Sep 2025

# 1. MODIS Terra daily snow cover (the SCA workhorse, 2000+)
mod = earthaccess.search_data(
    short_name="MOD10A1",            # Terra; pair with MYD10A1 (Aqua) to cut cloud gaps
    bounding_box=aoi,
    temporal=(f"{water_year-1}-10-01", f"{water_year}-09-30"),
)
# Open granules cloud-direct; read the NDSI_Snow_Cover band (0–100 = snow, 200–255 = flags)
files = earthaccess.open(mod)
# For each day: mask cloud/fill flags, count pixels with NDSI_Snow_Cover >= 40
#   -> snow-covered area (km^2) and fractional SCA for the AOI

# 2. VIIRS continuity (2012+) — extends the record as MODIS Terra ages out
vnp = earthaccess.search_data(
    short_name="VNP10A1",
    bounding_box=aoi,
    temporal=(f"{water_year-1}-10-01", f"{water_year}-09-30"),
)

# 3. SWE context (NOT from optical) — Daymet over North America
swe = earthaccess.search_data(
    short_name="Daymet_Daily_V4R1",  # use the 'swe' variable
    bounding_box=aoi,
    temporal=(f"{water_year-1}-10-01", f"{water_year}-09-30"),
)
# Sum/peak SWE over the AOI -> modeled basin water stored as snow (mm -> volume)

# 4. Build the seasonal curve + compare to climatology
#    - daily SCA time series for this water year
#    - 2000-present mean SCA curve (per day-of-water-year)
#    - peak SWE date and melt-out date vs the long-term mean
#    - linear trend in snow-cover duration (days/decade)

Expected output

  • Seasonal SCA curve: fractional snow-covered area by day-of-water-year, this year overlaid on the 2000–present mean (with min/max envelope)
  • Peak-snow map: maximum NDSI snow-cover extent for the AOI near April 1, with the climatological snow line marked
  • SWE context panel (Daymet): modeled peak basin SWE in mm and equivalent stored volume — clearly labeled as model-based, not optical
  • Trend readout: snow-cover duration change in days/decade and melt-out-date shift, with the caveat that ~25 years is a short hydrologic record

Caveats

  • NDSI threshold matters. The MOD10A1 default snow/no-snow cut is NDSI ≥ 0.4 (band value ≥ 40); document whichever you use.
  • Terra+Aqua merge cuts cloud gaps but introduces a ~3-hour viewing-time difference; for melt-rate estimates note it.
  • Collection 6.1 is current (MOD10A1.061). Don’t mix C6 and C6.1 NDSI values in one trend.
  • Microwave SWE saturates above ~150–200 mm SWE and fails in wet/melting snow — don’t read AMSR2/SMAP SWE as truth in deep mountain snowpack.
  • Daymet is model output, not an observation; its SWE is a reanalysis-style estimate and North America only.

Cross-DAAC composition

NSIDC DAAC (MOD10A1 / MYD10A1 / VNP10A1) + ORNL DAAC (Daymet) — all via earthaccess + a single Earthdata Login.

Sources

How a scientist answers this
Parameters
Daily snow-covered area from MODIS MOD10A1/MYD10A1 and VIIRS VNP10A1 NDSI snow cover (500/375 m), aggregated to snow-covered-area (km2 or % of basin) per day; snow water equivalent (SWE, mm) is not in the optical product and comes from passive microwave (AMSR2/SMAP, ~10-25 km), Daymet (modeled, 1 km, North America), or MERRA-2 snow mass. Peak SWE timing (e.g., ~April 1 in the Sierra) anchors comparisons.
Method
Cloud-gap-fill the NDSI record (Terra+Aqua merge and short temporal compositing), build the seasonal accumulation/melt curve to extract peak SCA and melt-out date, and fit an area-weighted Theil-Sen + Mann-Kendall trend on annual snow-cover duration and melt-out date versus the 2000-present climatology; combine NDSI with a DEM to track snow-line elevation.
Validation
Honestly flag interpolated cloud-gap days and report coverage, and validate SWE/melt timing against SNOTEL stations, airborne lidar (ASO), or Daymet, noting optical NDSI is blinded under forest canopy and that coarse microwave SWE carries large uncertainty.
In plain EnglishCount how much of the basin is snow-covered each day from satellite, chart when snow peaks and melts out, and check whether that season is getting shorter over the years — depth/water content needs separate microwave or ground data.

Make it yours → Change the basin bounding box and water-year window, and set the NDSI snow threshold and the climatology period for the melt-out comparison.

Run the core method · no login

The robust trend (Theil–Sen + Mann–Kendall) at the heart of this question — runnable on synthetic data, right here. The full earthaccess code template further down does it on real NASA data (needs an Earthdata login).

editable · runs in your browser

Datasets used