Is a glacial lake above my valley growing toward an outburst flood?
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.
78.5, 30.3 → 80.5, 31.3 (Uttarakhand Himalaya)Is a glacial lake above my valley growing toward an outburst flood?
What you can answer
- Year-over-year glacial-lake surface area for any high-mountain AOI
- Growth trend and acceleration — the primary GLOF precursor signal
- Which lake in a basin is expanding fastest (multi-lake screening)
- Moraine / dam geometry context from Copernicus GLO-30 DEM and ICESat-2 elevation
- Downstream exposure framing — channel slope and relief below the lake
What you can NOT answer with these alone
- Whether a breach is imminent — area growth is a precursor, not a deterministic trigger; ice/rock avalanche, seepage, and moraine internal structure are not observable from optical area alone.
- Sub-canopy or sub-debris water — debris-covered lakes and supraglacial ponds under debris are easily missed by a water index.
- Monsoon-season change — persistent cloud blanks out optical sensors for months; SAR (e.g. Sentinel-1) is needed to see through cloud.
- An engineering hazard rating — dam-break modelling, geotechnical breach analysis, and inundation hydraulics require field survey and physical models.
Code template
import earthaccess
import xarray as xr
import numpy as np
earthaccess.login(strategy="netrc")
# AOI: Uttarakhand Himalaya
aoi = (78.5, 30.3, 80.5, 31.3)
years = range(2016, 2026)
# 1. Harmonized Landsat-Sentinel (HLS) — clear late-ablation scenes per year
results = {}
for yr in years:
# post-monsoon window: minimal cloud, low fresh snow
granules = earthaccess.search_data(
short_name="HLSS30",
bounding_box=aoi,
temporal=(f"{yr}-10-01", f"{yr}-11-15"),
)
results[yr] = granules
# 2. For the clearest scene each year, compute NDWI = (green - NIR) / (green + NIR)
# (HLSS30 bands: B03 green, B08 NIR, B11 SWIR for MNDWI alternative)
# files = earthaccess.open(results[yr])
# ds = xr.open_dataset(...) # stack B03, B08
# ndwi = (ds.B03 - ds.B08) / (ds.B03 + ds.B08)
# lake_mask = ndwi > 0.2 # threshold — tune & QA visually per scene
# pixel_area_m2 = 30 * 30
# lake_area_km2 = lake_mask.sum() * pixel_area_m2 / 1e6
# 3. Build per-year area series → detect growth / acceleration
# 4. Moraine/dam context: Copernicus GLO-30 DEM + ICESat-2 ATL06 along-track
# dem = earthaccess.search_data(short_name="...", bounding_box=aoi)
# Use DEM to extract downstream channel slope below the lake outlet
# 5. Flag: lakes whose area trend is positive AND accelerating
Expected output
- Per-lake area time series: km² per year with a fitted growth trend
- Growth-flag table: lakes ranked by rate and acceleration of area increase
- Lake-outline overlays on the clearest scene each year (visual QA of the masks)
- DEM cross-section through the moraine dam + downstream channel slope profile
- Exposure note: relief and slope between the lake and the nearest settlement
Caveats
- NDWI/MNDWI false positives: cloud shadow, terrain shadow, and fresh snow can mimic water; turbid or partly frozen lakes can be missed. Always QA masks visually.
- Threshold is scene-dependent: a single NDWI cutoff (commonly near 0 to 0.2) is a starting point only — verify against the imagery; do not treat it as a fixed standard.
- Monsoon optical gap: June–September cloud cover blanks Himalayan scenes; combine with Landsat history and, for all-weather monitoring, Sentinel-1 SAR.
- Screening, not assessment: area growth flags candidates for expert review. It is not a substitute for a GLOF hazard study, dam-break modelling, or field survey.
- Geolocation & co-registration: multi-sensor area comparison requires consistent reprojection; small misregistration inflates apparent change.
Cross-DAAC composition
LP DAAC (HLS), USGS (Landsat C2 L2), ESA/Copernicus (Sentinel-2, GLO-30 DEM), and NSIDC DAAC (ICESat-2) — multiple providers and auth contexts; HLS via earthaccess gives the fastest single-auth start.
Sources
- HLS (Harmonized Landsat Sentinel-2): https://hls.gsfc.nasa.gov/
- Copernicus DEM GLO-30: https://spacedata.copernicus.eu/collections/copernicus-digital-elevation-model
- ICESat-2 ATL06: https://nsidc.org/data/atl06
- ICIMOD glacial lakes / GLOF resources: https://www.icimod.org/
- NDWI water index (McFeeters 1996); MNDWI (Xu 2006) — see method notes before fixing thresholds
Make it yours → Set your valley's bounding box and the years to scan; the notebook builds the per-year lake-area series and flags growth. Swap Sentinel-2 (10 m, 2015+) for finer detail or Landsat (30 m, 1984+) for the longer history, and change the water-index threshold to match local turbidity and snow conditions.
The thresholding a measurement into classes 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).