How fast is sea level rising at my stretch of coast, and who is exposed?
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.
-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
SLAfield (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 surge — altimetry 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, variableSLA, 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.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.
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).