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))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
- MODIS MOD10A1 (Terra daily snow cover): https://nsidc.org/data/mod10a1
- MODIS MYD10A1 (Aqua daily snow cover): https://nsidc.org/data/myd10a1
- VIIRS VNP10A1 (daily snow cover): https://nsidc.org/data/vnp10a1
- Daymet V4 (includes SWE): https://daac.ornl.gov/cgi-bin/dsviewer.pl?ds_id=2129
- NSIDC snow & ice data overview: https://nsidc.org/learn/parts-cryosphere/snow
Datasets used
📚 Problem Finder KB
Not yet tracked in the KB.