The short answer
Coastal terrain is the hardest setting for remote sensing because the surface you are mapping moves: tides shift the land-water boundary by tens of metres on flat shores, waves and turbidity corrupt the signal, and the elevation reference frame (which vertical datum?) is rarely obvious. Done well, optical satellites (Sentinel-2, Landsat) deliver shoreline position and intertidal extent through water indices, satellite-derived bathymetry estimates shallow depth from blue/green attenuation, and lidar or photogrammetry supplies the dune-and-cliff topography. The discipline that separates a usable coastal product from a misleading one is explicit handling of tidal stage and vertical datum — without them you measure the tide instead of the coast.
What "coastal terrain" actually requires
Three measurements dominate coastal work, and each has its own sensor logic:
- Shoreline / waterline position — a 2D boundary, mapped from optical multispectral.
- Intertidal and shallow bathymetric topography — the surface between low and high water, and the seabed just offshore.
- Backshore topography — dunes, beach face, cliffs, infrastructure — mapped from lidar or stereo photogrammetry.
Stitching these into one consistent terrain model is the engineering problem, and it lives or dies on coordinate and datum discipline.
Extracting the waterline
The land-water boundary in optical imagery is found with water indices that exploit water's strong absorption in NIR and SWIR:
- NDWI (McFeeters):
(Green − NIR) / (Green + NIR). Sentinel-2:(B3 − B8) / (B3 + B8). - MNDWI (Xu):
(Green − SWIR) / (Green + SWIR). Sentinel-2:(B3 − B11) / (B3 + B11). MNDWI usually suppresses built-up and soil false positives better than NDWI in developed coasts.
Threshold near zero (often refined with Otsu's method per scene rather than a fixed 0), produce a binary mask, then vectorise:
gdal_calc.py -A B3.tif -B B11.tif --calc="(A.astype(float)-B)/(A+B)" \
--outfile=mndwi.tif --NoDataValue=-9999
gdal_polygonize.py water_mask.tif -f "GPKG" shoreline.gpkg
In QGIS the same is Raster Calculator followed by Polygonize (raster to vector) and Polygons to lines. The output is an instantaneous waterline at the acquisition's tide — not a datum-referenced shoreline. For trend analysis, sub-pixel methods and tools like CoastSat or DSAS (the USGS Digital Shoreline Analysis System, which computes shoreline change rates along transects) are the standard, but they still require tidal normalisation.
Satellite-derived bathymetry (SDB)
In clear shallow water you can estimate depth because longer wavelengths attenuate faster: red is gone by a few metres, green penetrates further, blue furthest. The Stumpf log-ratio method models depth as a linear function of ln(Blue) / ln(Green), calibrated against known soundings:
Z = m1 · (ln(n·Rblue) / ln(n·Rgreen)) − m0
Practical limits: reliable to roughly 10-20 m in clear (Case-1) water, collapsing in turbid (Case-2) coastal water, over dark or vegetated bottoms, and under sun glint or breaking waves. Always apply sun-glint correction (e.g. Hedley's NIR-deglint) first, and validate against single-beam or multibeam soundings — SDB is an interpolation between known depths, not a substitute for survey-grade hydrography.
The two things people get wrong: tide and datum
Tidal stage
An optical scene is a snapshot. On an intertidal flat with a 1:500 slope, a 1 m tidal difference moves the waterline 500 m horizontally. Comparing a high-tide 2019 scene to a low-tide 2024 scene will show dramatic "erosion" that is pure tide. To compare dates you either:
- select scenes acquired near the same tidal height (query a tide model or gauge for the acquisition timestamp), or
- model the intertidal surface (waterline contours across many tides → a DEM) and slice every date at a common datum.
Sentinel-2's fixed ~10:30 local overpass means scenes sample a limited, predictable tidal window — useful, but it does not remove the spring-neap variation.
Vertical datum
Lidar arrives in ellipsoidal or orthometric heights (e.g. EGM2008/national geoid); nautical charts use Chart Datum (often Lowest Astronomical Tide); coastal managers want Mean Sea Level or Mean Higher High Water. These differ by metres and the offset varies along the coast. Document the datum and the transformation explicitly, and store the horizontal CRS too (e.g. EPSG:32630 for UTM 30N). PostGIS:
ALTER TABLE shoreline ALTER COLUMN geom TYPE geometry(LineString,32630)
USING ST_Transform(ST_SetSRID(geom,4326),32630);
VDatum-style transformations (NOAA's tool, in US waters) handle the tidal-to-geodetic conversion; elsewhere you reconstruct it from local tidal constituents and a geoid model.
A worked coastal-change workflow
- Define the question and datum — e.g. shoreline change 2017-2025 at MSL.
- Select scenes filtered to <10% cloud and a narrow tidal band; record each acquisition's modelled tide height.
- Mask and index — cloud/shadow mask (Sentinel-2 SCL band), then MNDWI, per-scene Otsu threshold.
- Extract and tidally correct waterlines; convert instantaneous lines to the common datum using the local beach slope.
- Compute change — cast DSAS transects, derive End Point Rate and Linear Regression Rate with uncertainty bands.
- Fuse topography — merge lidar backshore and SDB foreshore on a shared CRS and vertical datum, feathering the overlap.
- Validate against GNSS-RTK beach profiles, tide-gauge records and any port survey.
Common pitfalls and why they happen
- Treating the waterline as the shoreline. The waterline is tide-dependent; the shoreline is a datum-referenced feature. Conflating them bakes tidal noise into change rates.
- SDB over turbid water. The depth-from-colour model assumes light penetrates; suspended sediment breaks that assumption and depths come back shallow or random.
- Sun glint left in. Specular reflection off waves saturates blue/green and produces phantom shallow features; deglinting is not optional offshore.
- Datum soup. Combining lidar (orthometric) with charts (LAT) without a transformation injects 1-3 m vertical bias that no one notices until a flood model is wrong.
- Cloud/cirrus leakage. Thin cirrus brightens water and corrupts NDWI thresholds; rely on the SCL/QA mask, not visual inspection alone.
QA and validation
Confirm CRS and vertical datum are recorded on every layer; verify waterlines against independent tide data; check SDB residuals against soundings (report RMSE); and inspect estuary mouths, mudflats and structures where indices are weakest rather than open beach. Save intermediate masks so a reviewer can trace each shoreline back to its scene and tide.
Bathyl perspective
A coastal terrain product is only trustworthy if its tide and datum are stated as plainly as its resolution. We deliver shoreline and bathymetry layers with the acquisition tide, vertical datum, calibration soundings and validation residuals attached, so a coastal engineer can defend the numbers in a permitting or flood-risk context rather than discovering the tidal artefact downstream.
Related reading
- LiDAR vs Satellite Imagery
- Thermal Remote Sensing for Geology
- Remote Sensing Ground Truth Checklist
- Remote Sensing for Environmental Baselines
- Remote sensing and Earth data