Where is surface water, and how is it changing over time?
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.
60.5, 44 → 62.5, 46.5 (Aral Sea (Kazakhstan/Uzbekistan))This is the *persistent* surface-water question, not the storm-flood question (see q13). Here we ask: where does open water sit, and is the extent shrinking (drying lakes), expanding (filling reservoirs), or pulsing seasonally (wetlands, floodplains) across months and years?
Where is surface water, and how is it changing over time?
This is the persistent surface-water question, not the storm-flood question (see q13). Here we ask: where does open water sit, and is the extent shrinking (drying lakes), expanding (filling reservoirs), or pulsing seasonally (wetlands, floodplains) across months and years?
What you can answer
- Open-water extent maps at 30 m, all-weather, from OPERA DSWx-S1 (radar) — no cloud gaps
- Optical surface-water classification (open water + partial-surface water) from OPERA DSWx-HLS
- Multi-year extent change — area time series to flag shrinking lakes or filling reservoirs
- Seasonal wetland pulsing — wet-season vs dry-season extent from dense radar revisit
- Comparison to a long-term baseline by joining the JRC/Pekel occurrence layer (1984–present)
- Radar-optical cross-validation — DSWx-S1 vs DSWx-HLS agreement on cloud-free dates
What you can NOT answer with these alone
- Water volume or depth — extent is a 2-D footprint; volume needs DSWx area × DEM/bathymetry or altimetry (SWOT/ICESat-2, see q06)
- Water-surface elevation / level — DSWx is a binary-ish water mask, not a height product
- Why it changed — attribution (irrigation withdrawal vs drought vs dam operation) needs GRACE-FO, IMERG, and land-use context
- Water quality (turbidity, algae, salinity) — that’s an optical-reflectance/HAB problem (see q14), not a water mask
- Sub-30 m features — narrow streams, small ponds, and field-scale irrigation are below product resolution
- Daily flood peaks — for fast storm events use q13’s near-real-time SAR workflow
Code template (Python, cloud-direct)
import earthaccess
import numpy as np
earthaccess.login(strategy="netrc")
# Aral Sea — the textbook shrinking-lake case, eastern basin nearly gone
aoi = (60.5, 44.0, 62.5, 46.5)
window = ("2023-04-01", "2025-09-30")
# 1. OPERA DSWx-S1 — radar surface water, all-weather, the workhorse here
dswx_s1 = earthaccess.search_data(
short_name="OPERA_L3_DSWX-S1_V1",
bounding_box=aoi,
temporal=window,
)
# Open the WTR (water classification) band per granule as a COG.
# Class values (DSWx convention):
# 0 = not water, 1 = open water, 252/253/254/255 = fill/cloud/no-data masks.
# Build a boolean mask: water = (WTR == 1)
# Area per scene = water.sum() * 30 * 30 m² → km² → append to a time series.
# 2. OPERA DSWx-HLS — optical cross-check on cloud-free dates
dswx_hls = earthaccess.search_data(
short_name="OPERA_L3_DSWX-HLS_V1",
bounding_box=aoi,
temporal=window,
)
# DSWx-HLS WTR adds partial-surface-water classes (open vs partial vs snow/ice);
# treat open water = 1, optionally fold in partial water = 2 for a wetland-inclusive count.
# Only trust scenes where the cloud/no-data fraction over the AOI is low.
# 3. Sentinel-1 GRD fallback if you need a custom threshold or earlier (pre-2023) record
s1 = earthaccess.search_data(
short_name="SENTINEL-1A_SLC", # or GRD product per ASF catalog
bounding_box=aoi,
temporal=("2014-10-01", window[0]),
)
# For GRD: VV backscatter < ~-20 dB → smooth open water. Requires RTC/calibration
# (use OPERA RTC-S1 to avoid raw SAR processing). Lets you backfill years before DSWx.
# 4. Optional external baseline: JRC/Pekel Global Surface Water occurrence (1984–present)
# Not on Earthdata — pull from the JRC dataset (Earth Engine / Google Cloud / direct
# GeoTIFF tiles). Reproject to the DSWx grid, then compare current extent vs the
# long-term water-occurrence climatology to quantify gain/loss.
# 5. Build the change product:
# - Extent time series: km² of water per acquisition date (DSWx-S1 primary)
# - Trend: linear fit / seasonal decomposition over the window
# - Loss/gain map: pixels that flipped water→land (or land→water) vs the baseline
Expected output
- Extent time series: surface-water area (km²) per date, radar (DSWx-S1) as the backbone with optical (DSWx-HLS) points overlaid on cloud-free dates
- Trend summary: net area change over the window + seasonal amplitude for wetlands
- Change map: water-loss (red) and water-gain (blue) pixels vs the JRC/Pekel baseline
- Latest all-weather water mask for the AOI
Caveats
- DSWx-S1 is radar — roughness, not depth. Wind-roughened open water can read as land; smooth wet soil or tarmac can false-positive. Class flags (cloud/no-data) must be respected.
- DSWx-HLS is cloud-limited. Persistent cloud means sparse optical coverage — lean on DSWx-S1 for the continuous record and use HLS as a cross-check.
- OPERA DSWx is operational from ~2023, so the native record is short. Backfill earlier years with Sentinel-1 GRD/RTC-S1 (from 2014) or the JRC/Pekel baseline (from 1984).
- 30 m resolution misses narrow channels, small ponds, and sub-pixel mixing along shorelines; reported area has shoreline-pixel uncertainty.
- Layover/shadow in terrain corrupts radar water detection in steep areas; DSWx flags these but interpret mountain lakes carefully.
- JRC/Pekel is external (not Earthdata) and on its own grid — reproject before any pixel-wise comparison.
- Extent ≠ volume. A lake can hold steady area while losing depth; pair with altimetry (q06) to track storage.
Cross-DAAC composition
ASF DAAC (OPERA DSWx-S1, Sentinel-1, RTC-S1) + LP DAAC (OPERA DSWx-HLS, HLS) — two DAACs, one Earthdata Login. JRC/Pekel is an external join (see r01 for cross-source patterns).
Sources
- OPERA DSWx-S1 product: https://www.jpl.nasa.gov/go/opera/products/dswx-product
- OPERA DSWx-S1 in Earthdata Search: https://search.earthdata.nasa.gov/search?q=OPERA_L3_DSWX-S1_V1
- OPERA DSWx-HLS in Earthdata Search: https://search.earthdata.nasa.gov/search?q=OPERA_L3_DSWX-HLS_V1
- ASF OPERA DSWx guide: https://hyp3-docs.asf.alaska.edu/guides/opera/
- JRC Global Surface Water (Pekel et al. 2016, Nature): https://global-surface-water.appspot.com/
- Aral Sea change (NASA Earth Observatory): https://earthobservatory.nasa.gov/world-of-change/AralSea
Make it yours → Edit the bounding box, date range, and wet/dry-season windows, and toggle radar-only versus radar+optical to trade cloud-immunity for cross-checking.
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).