q38·advanced

Is the glacier above my valley thinning, and how fast?

cryosphereclimatewater-resources Datasets: 3 45–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: -148.5, 60.3 → -148, 60.7 (Columbia Glacier region, Alaska)

A glacier thins when it loses more ice to melt and calving than it gains from snowfall — and the clearest fingerprint is that its *surface drops* year after year. NASA's **ICESat-2** satellite fires a green laser at the ground and times the return — space-based [lidar](/glossary/lidar/) — to measure surface height to within a few centimetres. The **ATL06** product turns those returns into land-ice surface heights along narrow ground tracks, so you can watch the same strip of a glacier and see whether it sat lower this year than last. **Verified locally.** For the Columbia Glacier region of Alaska (60.3–60.7 °N), the ATL06 `h_li` field returned **20,760 valid surface-height measurements** across 8 ICESat-2 passes in the 2023 melt season (Mar–Sep), spanning elevations from sea level up to **1,702 m** with a median of **191 m**. Thinning itself is the *difference* between repeat passes over the same track — ATL06 gives you the heights; you subtract matched tracks across years to get the rate.

Is the glacier above my valley thinning, and how fast?

A glacier thins when it loses more ice to melt and calving than it gains from snowfall — and the clearest fingerprint is that its surface drops year after year. NASA’s ICESat-2 satellite fires a green laser at the ground and times the return — space-based lidar — to measure surface height to within a few centimetres. The ATL06 product turns those returns into land-ice surface heights along narrow ground tracks, so you can watch the same strip of a glacier and see whether it sat lower this year than last.

Verified locally. For the Columbia Glacier region of Alaska (60.3–60.7 °N), the ATL06 h_li field returned 20,760 valid surface-height measurements across 8 ICESat-2 passes in the 2023 melt season (Mar–Sep), spanning elevations from sea level up to 1,702 m with a median of 191 m. Thinning itself is the difference between repeat passes over the same track — ATL06 gives you the heights; you subtract matched tracks across years to get the rate.

What you can answer

  • The surface elevation along a glacier, to within centimetres, every time ICESat-2 flew over — ATL06 h_li (metres; fill values above 3×10³⁸ must be dropped)
  • Whether the surface dropped between two years — match a repeat ground track from, say, 2019 and 2024 and difference the heights to get a thinning amount in metres
  • A thinning rate — divide that elevation change by the time between passes (m per year)
  • Where the loss is concentrated — thinning is usually fastest near the terminus and on the lower tongue, slower up in the accumulation zone
  • A long, consistent record — ICESat-2 has flown since 2018 with repeat tracks roughly every 91 days, giving many chances to revisit the same line

What you can NOT answer with these datasets alone

  • A full thinning map of the whole glacier — ICESat-2 measures only along narrow laser tracks, not wall-to-wall. Between tracks you have gaps; pair with a digital elevation model for the full surface.
  • Ice volume or mass loss directly — height change is not mass; converting to water needs a firn/ice density assumption and the glacier’s area
  • Why it is thinning — melt versus calving versus reduced snowfall needs climate and terminus data, not elevation alone
  • Cloudy-day or heavily-crevassed returns — clouds block the laser and rough ice scatters it; many segments are flagged or missing, so coverage is uneven
  • The terminus position — for where the ice front sits and how it retreats, use optical imagery like HLSL30 alongside

Code template (Python, cloud-direct)

Verified locally. ATL06, variable land_ice_segments/h_li, is an HDF5 file with six beam groups (gt1lgt3r). Search with a bounding box, drop fill values (> 3×10³⁸), and mask to your AOI. Repeat tracks across years, differenced, give thinning over time.

import os, re, warnings
warnings.filterwarnings("ignore")
import earthaccess, h5py, numpy as np

# load Earthdata creds from .env without `source` (passwords can break the shell)
for line in open(".env"):
    m = re.match(r'\s*(?:export\s+)?([A-Z0-9_]+)\s*=\s*(.*)\s*$', line)
    if m: os.environ.setdefault(m.group(1), m.group(2).strip().strip('"').strip("'"))
earthaccess.login(strategy="environment")   # free Earthdata Login

W, S, E, N = -148.5, 60.3, -148.0, 60.7     # your glacier (Columbia, Alaska)
res = earthaccess.search_data(short_name="ATL06",
                              temporal=("2023-03-01", "2023-09-30"),
                              bounding_box=(W, S, E, N))
files = earthaccess.download(res, local_path="/tmp/atl06")

beams = ["gt1l","gt1r","gt2l","gt2r","gt3l","gt3r"]
heights = []
for f in files:
    with h5py.File(f, "r") as hf:
        for b in beams:
            try:
                h   = hf[f"{b}/land_ice_segments/h_li"][:]
                lat = hf[f"{b}/land_ice_segments/latitude"][:]
                lon = hf[f"{b}/land_ice_segments/longitude"][:]
            except KeyError:
                continue
            m = (h < 3e38) & (lat>=S)&(lat<=N)&(lon>=W)&(lon<=E)
            if m.sum():
                heights.append(h[m])

arr = np.concatenate(heights)
print("valid h_li over AOI:", arr.size)
print("elevation range: %.1f to %.1f m" % (arr.min(), arr.max()))

# thinning = repeat the search for an EARLIER year, match the same ground track
# (RGT / cycle), interpolate to common along-track positions, and subtract:
#   thinning_m_per_yr = (h_later - h_earlier) / years_between
How a scientist answers this
Parameters
Land-ice surface elevation from ICESat-2 ATL06 `h_li` (metres, along-track, drop fill values >3×10³⁸), used to compute elevation change dh and thinning rate dh/dt; HLSL30 optical imagery delineates the terminus and Copernicus DEM provides terrain for slope correction and geolocation.
Method
Match repeat ICESat-2 ground tracks (same reference pair tracks) over the glacier across years, correct for cross-track offset using the DEM slope, difference `h_li` along matched segments to get dh, and divide by the time between passes for a thinning rate; aggregate by elevation band to build a thinning-vs-altitude profile.
Validation
Report number of valid points and passes per segment (flag sparse tracks), apply ATL06 quality flags, propagate the few-cm height uncertainty plus slope-correction error into dh/dt, and compare rates to published glacier mass-balance literature.
In plain EnglishUse the satellite laser to measure the glacier's surface height along the same lines in different years, subtract them to see how much it dropped, and divide by the time to get a thinning rate.

Make it yours → Change the glacier AOI, the pair of years to difference, and the track-matching radius in the notebook.

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