q31·advanced

How fast is sea level rising at my stretch of coast, and who is exposed?

oceanclimatecoastalpublic-health Datasets: 3 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: -74.3, 40.4 → -73.7, 40.9 (New York / New Jersey coast, USA)

The ocean isn't rising at the same speed everywhere. Winds, currents, and where the water is warmest all tilt the sea surface, so the rate at your harbor can differ from the global average. NASA's **MEaSUREs gridded sea level anomaly** product stitches together decades of satellite [radar altimetry](/glossary/radar-altimetry/) into a 1/6° map of how high the sea surface sits relative to its long-term mean — so you can watch your own coast and fit the trend. **Verified locally.** For the New York / New Jersey coast (40.4–40.9 °N), the `SLA` field in the 5-day granule centered **3 Jan 2015** read a mean of **-0.071 m (about -7 cm below the multi-year mean)** over the box — a single winter snapshot. To turn snapshots into a *rate*, you fit a straight line through the SLA over many years; the slope is your local sea-level rise in mm/year. SLA tells you how fast the water is climbing; pairing it with a 30 m elevation model and a population grid tells you who sits in the path.

How fast is sea level rising at my stretch of coast, and who is exposed?

The ocean isn’t rising at the same speed everywhere. Winds, currents, and where the water is warmest all tilt the sea surface, so the rate at your harbor can differ from the global average. NASA’s MEaSUREs gridded sea level anomaly product stitches together decades of satellite radar altimetry into a 1/6° map of how high the sea surface sits relative to its long-term mean — so you can watch your own coast and fit the trend.

Verified locally. For the New York / New Jersey coast (40.4–40.9 °N), the SLA field in the 5-day granule centered 3 Jan 2015 read a mean of -0.071 m (about -7 cm below the multi-year mean) over the box — a single winter snapshot. To turn snapshots into a rate, you fit a straight line through the SLA over many years; the slope is your local sea-level rise in mm/year. SLA tells you how fast the water is climbing; pairing it with a 30 m elevation model and a population grid tells you who sits in the path.

What you can answer

  • How high the sea sits over your coast right now, and back to the early 1990s — the SLA field (meters relative to the 20-year mean), every 5 days
  • Your local rate of rise — fit a linear trend through years of SLA and read the slope in mm/year; coastal rates often differ from the global ~3.4 mm/year average
  • How the seasonal cycle and year-to-year swings look — winters and El Niño years ride higher or lower than the trend line
  • Who sits low enough to care — overlay Copernicus DEM (GLO-30) to find land below a chosen elevation, then count people there with WorldPop’s 1 km grid (both free, no login)
  • A first-order exposure tally — population living below, say, 2 m elevation within your AOI, as a screening number for further study

What you can NOT answer with these datasets alone

  • Actual flood risk for a given street — SLA is open-ocean sea level on a coarse 1/6° (~18 km) grid; it does not resolve harbors, tidal creeks, or storm surge that drive real flooding
  • Land that is sinking — many coasts subside (groundwater pumping, sediment compaction); the relative sea-level rise people feel needs tide gauges or GPS/InSAR land-motion data added in
  • Tides and surgealtimetry SLA is de-tided and 5-day-averaged; it misses the high-water events that actually flood streets
  • Sub-kilometre exposure detail — WorldPop at 1 km and DEM at 30 m give screening estimates, not parcel-level counts; buildings, sea walls, and floodgates aren’t represented
  • Future projections — a fitted trend is a description of the past, not a forecast; scenarios need climate-model sea-level projections

Code template (Python, cloud-direct)

Verified locally. SEA_SURFACE_HEIGHT_ALT_GRIDS_L4_2SATS_5DAY_6THDEG_V_JPL2205, variable SLA, is a global 5-day NetCDF on a 1/6° grid. Longitudes run 0–360, so convert your western longitudes before slicing. Values are in meters relative to the long-term mean.

import warnings, os, re, earthaccess, xarray as xr, numpy as np
warnings.filterwarnings("ignore")   # hush earthaccess FutureWarnings

# 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

SN = "SEA_SURFACE_HEIGHT_ALT_GRIDS_L4_2SATS_5DAY_6THDEG_V_JPL2205"
W, S, E, N = -74.3, 40.4, -73.7, 40.9       # your coast (New York / New Jersey)

g = earthaccess.search_data(short_name=SN,
                            temporal=("2015-01-01", "2015-03-01"),
                            bounding_box=(W, S, E, N))
ds  = xr.open_dataset(earthaccess.open(g[:1])[0], engine="h5netcdf")

# grid longitudes are 0-360; wrap the box before slicing
Wp, Ep = W % 360, E % 360
sla = ds["SLA"].sel(Longitude=slice(min(Wp, Ep), max(Wp, Ep)),
                    Latitude=slice(S, N))
print("mean SLA:", round(float(sla.mean(skipna=True)), 4), "m")   # -> -0.071 m

# local rate of rise: loop years, average SLA over the box per granule, then
# np.polyfit(time_in_years, sla_series, 1)[0] * 1000  -> mm/year (the slope is the trend)
# exposure: load Copernicus DEM (GLO-30) + WorldPop (wpic1km), mask land below a
# chosen elevation in the AOI, and sum population there for a screening count.
How a scientist answers this
Parameters
Gridded sea level anomaly (`SLA`, meters relative to the ~20-year mean) from MEaSUREs satellite altimetry (SEA_SURFACE_HEIGHT_ALT_GRIDS_L4_2SATS_5DAY_6THDEG_V_JPL2205, 1/6°, every 5 days, early-1990s–), with Copernicus DEM GLO-30 elevation and WorldPop 1 km population to map who sits low. The global mean rate is ~3.4 mm/yr; local rates differ.
Method
Area-average `SLA` over the coastal box into a time series, optionally deseasonalize, and fit a robust linear trend (Theil–Sen slope with Mann–Kendall significance) to read the local rise in mm/yr; intersect a sea-level scenario with the DEM to delineate low-lying land and overlay WorldPop to count exposed population.
Validation
Cross-check the altimetry rate against the nearest tide-gauge record (e.g. PSMSL/NOAA), state that altimetry measures absolute sea surface while gauges include vertical land motion, and confirm the SLA baseline period; flag short records as noisy for trend estimation.
In plain EnglishWatch the sea-surface height over your coast for decades, fit a line to get the rise in millimeters per year, then drape it over an elevation map and population grid to see who's in the path.

Make it yours → Set the coastal box, the trend years, and the flood-elevation scenario in the notebook; swap the population or elevation layer as needed.

Run the core method · no login

The detection / counting above a threshold 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