q21·intermediate

After days of monsoon rain, is the hillside above my village about to slide?

landdisaster-responsehydrologypublic-health Datasets: 5 30–60 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: 83.5, 27.8 → 84.5, 28.6 (Kaski / Myagdi mid-hills, Nepal (monsoon landslide belt))
On this page

After days of monsoon rain, is the hillside above my village about to slide?

What you can answer

  • The landslide-hazard probability for your area from the LHASA nowcast (p_landslide, 0–1), for any day in the 2015–2021 archive
  • Multi-day rainfall accumulation over the slope from IMERG (the trigger that primes the soil)
  • How steep the terrain is above the village (slope from SRTM) — steepness is a core LHASA input
  • Whether rainfall is still climbing or easing in the hours before a decision, using the half-hourly Late run
  • Which sub-areas of a district are most exposed by overlaying nowcast hazard on steep, populated valleys
  • Roughly how many people live in the high-hazard area — overlay free WorldPop population and count people inside high-probability pixels, then name the district with geoBoundaries (verified: ~1.67M people in the default Kaski box, district Kaski)

What you can NOT answer with these alone

  • The exact hour or spot a slope will fail — LHASA is a regional ~1 km hazard signal, not a slope-specific failure prediction
  • Deep-seated or earthquake-triggered slides — LHASA targets shallow, rain-triggered landslides only
  • Failures with no rain trigger (undercutting, construction, irrigation, snowmelt) — outside the rainfall-driven model
  • Casualties or damage — you can now estimate people exposed (WorldPop overlay below), but actual deaths, injuries, and property loss depend on building strength, timing, and warning, which these layers don’t capture

Code template

Verified locally. LHASA carries two collections with the same short_name — pass version="2.0.0" to get the current model. v2 archive runs 2015 → Feb 2021 and the nowcast variable is p_landslide (a 0–1 probability, not a 0/1/2 category). For live near-real-time hazard, use the LHASA portal directly.

import earthaccess
import xarray as xr
import numpy as np

earthaccess.login(strategy="netrc")

# AOI: Kaski / Myagdi mid-hills, Nepal — monsoon landslide belt
aoi = (83.5, 27.8, 84.5, 28.6)            # W, S, E, N
# A real monsoon window inside the LHASA v2 archive (deadly 2020 Nepal season)
rain_window    = ("2020-07-10", "2020-07-15")
nowcast_window = ("2020-07-14", "2020-07-15")

# 1. LHASA daily landslide nowcast — probability of a rain-triggered landslide
nowcast = earthaccess.search_data(short_name="Global_Landslide_Nowcast",
                                  version="2.0.0",           # disambiguate the two collections
                                  bounding_box=aoi, temporal=nowcast_window)
nc = xr.open_dataset(earthaccess.open(nowcast[:1])[0])       # global lat/lon grid
p = nc["p_landslide"].sel(lat=slice(aoi[1], aoi[3]),         # 0–1 hazard probability
                          lon=slice(aoi[0], aoi[2]))

# 2. IMERG half-hourly Late — multi-day rainfall accumulation (the trigger)
imerg = earthaccess.search_data(short_name="GPM_3IMERGHHL",
                                bounding_box=aoi, temporal=rain_window)
rain = xr.open_mfdataset([earthaccess.open([g])[0] for g in imerg],
                         group="Grid")["precipitation"]       # variables live in /Grid
rain_mm = (rain * 0.5).sum("time")                            # half-hour rates → mm total

# 3. SRTM 30m DEM → slope (LHASA uses steepness; recompute locally for the hillside)
dem = earthaccess.search_data(short_name="SRTMGL1", bounding_box=aoi)
# Read tiles, mosaic, compute slope = arctan(gradient) in degrees

# 4. Flag danger: high probability AND steep slope AND heavy multi-day rain
#    danger = (p > 0.5) & (slope_deg > 25) & (rain_mm > 100)

# 5. Who's exposed — free WorldPop population + geoBoundaries place names (no NASA login)
import requests, rasterio
from rasterio.windows import from_bounds
import geopandas as gpd
from shapely.geometry import Point

meta = requests.get("https://www.worldpop.org/rest/data/pop/wpic1km?iso3=NPL").json()
pop_url = next(f for f in meta["data"][-1]["files"] if f.endswith(".tif"))
open("npl_pop_1km.tif", "wb").write(requests.get(pop_url).content)   # ~1 MB

with rasterio.open("npl_pop_1km.tif") as src:
    pop = src.read(1, window=from_bounds(*aoi, transform=src.transform)).astype("float64")
    pop[pop == src.nodata] = np.nan
print(f"People in AOI: {np.nansum(pop):,.0f}")        # verified ~1.67M for this Kaski box

adm = gpd.read_file(requests.get(
    "https://www.geoboundaries.org/api/current/gbOpen/NPL/ADM2/").json()["gjDownloadURL"])
print("District:", adm[adm.contains(Point(83.98, 28.21))].iloc[0]["shapeName"])   # 'Kaski'
# People below the danger pixels: resample `pop` onto the hazard grid, sum where danger is True.

Expected output

  • Hazard map: today’s LHASA nowcast (moderate/high) clipped to the AOI
  • Rainfall map: multi-day IMERG accumulation (mm) over the slopes
  • Slope map: SRTM-derived steepness (degrees), highlighting >25° terrain
  • Combined danger flag: steep + soaked + high-nowcast pixels nearest the village
  • Statistics: peak accumulated rainfall (mm); area under high hazard (km²); steepest slope above the settlement
  • Exposure: estimated people living in the high-hazard area (WorldPop), with the district named (geoBoundaries)

Caveats

  • LHASA is a hazard nowcast, not a forecast or a prediction of failure — treat “high” as elevated risk warranting caution, not a guarantee a slope will move.
  • IMERG Late has ~12-hr latency and orographic under-bias in steep terrain (Himalaya, Cordillera) — it tends to underestimate mountain rainfall vs gauges.
  • ~1 km nowcast vs 30 m terrain mismatch — the nowcast cannot resolve the single hillside above one village; use slope/aspect to localize within a hazard cell.
  • Archive ends Feb 2021 — the GES DISC v2 record covers 2015–2021, ideal for studying past monsoon seasons; for today’s hazard use the live LHASA portal, not this archive.
  • Local ground signs still matter — cracks, tilting trees, muddy springs, and rumbling are faster warnings than any satellite product.
  • Not a substitute for official warnings — defer to national disaster authorities for evacuation decisions.

Cross-DAAC composition

GES DISC (LHASA nowcast + IMERG) + LP DAAC (SRTMGL1) — two DAACs, uniform Earthdata Login.

Sources

How a scientist answers this
Parameters
Daily rain-triggered landslide hazard probability p_landslide (0–1) from the NASA LHASA Global Landslide Nowcast (~1 km, 2015–2021 archive), driven by multi-day antecedent rainfall accumulation from GPM IMERG Half-Hourly Late (mm over 1–7 day windows). Terrain steepness is slope (degrees) computed from the SRTM 30 m DEM (a core LHASA susceptibility input); exposure is people inside high-hazard pixels via WorldPop (1 km), with the area named from geoBoundaries ADM2.
Method
Read the LHASA nowcast probability over the AOI, accumulate IMERG rainfall over rolling antecedent windows to gauge how primed the soil is, derive slope from the DEM, and intersect high-probability pixels with steep, populated terrain; sum WorldPop counts inside high-hazard pixels for exposure. LHASA combines a static susceptibility map (slope, geology, forest loss, road/fault distance) with a rainfall trigger.
Validation
Compare nowcast hazard days against any cataloged local landslide events and confirm the rainfall driver against an independent gauge or product; state that LHASA is a regional ~1 km hazard signal (shallow rain-triggered slides only), not a slope-specific or hour-specific failure forecast, and that IMERG underestimates orographic extremes.
In plain EnglishAdd up the recent rain over the steep slope above the village and read NASA's daily landslide-hazard map, then count how many people live in the most dangerous pixels — it flags elevated risk for the region, not the exact spot or hour a slope will give way.

Make it yours → Change the AOI box, the date in the 2015–2021 archive, the rainfall accumulation window, and the slope/probability thresholds used to flag high-hazard exposed pixels.

Run the core method · no login

The Before-After-Control-Impact vs a noise floor 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