What it is
ATS Tsunami Atlas maps the NOAA NCEI / World Data Service Global Historical Tsunami Database — the authoritative global record of tsunamis and their effects. All 3,135 events are fetched live from the NOAA hazard service at load; 2,669 of them carry coordinates and can be placed on a map, and the app says so rather than quietly dropping the remaining 466.
Each source is coloured by cause on an Okabe-Ito colour-blind-safe palette and sized by its maximum recorded water height. Behind those five colours sit twelve raw cause codes, and the service publishes no enumeration endpoint for them — so they were decoded empirically against the data itself. Code 10 has exactly two rows: Halifax, Nova Scotia, and Ripple Rock, British Columbia. That is the 1917 Halifax Explosion and a 1958 demolition blast, which is how we know code 10 means Explosion.
The database records confidence as well as fact. Every event carries an eventValidity from -1 (erroneous entry) to 4 (definite tsunami), and the atlas opens on definite and probable events only — 1,582 mappable records — with one control to widen out to everything on record, doubtful entries included.
The app is zero-credential and holds no copy of the database. Every count on screen is the service's own.
The experience
The map opens on the Pacific basin with the record clustered across it, and the controls follow the questions people actually ask of this list:
- Find an event. Type a place or country — Honshu, Chile, Krakatau — and the map narrows as you type.
- Set the confidence. Definite only (1,070 mappable), definite plus probable (1,582, the default), or everything on record (2,669) including the very doubtful entries science has since argued about.
- Filter by cause. Five chips for earthquake, volcano, landslide, meteorological and other. Earthquakes dominate at 2,271 of the 3,135 events; meteotsunamis — waves driven by weather, not geology — account for 184.
- Scrub four thousand years. A year-range slider spans 2100 BC to today, and the per-century histogram redraws from the filtered set. The curve is brutally lopsided: the record thins to almost nothing before the modern era, because what survives from antiquity is what someone wrote down.
- Open an event. The card gives the date, cause, confidence, earthquake magnitude and depth, maximum water height, deaths, injuries, houses destroyed and the NCEI event id.
- Watch the wave land. Selecting an event fetches its run-ups and draws every one that has coordinates, sized by run-up height, with arcs from the source to the tallest. The map then frames the reach rather than the epicentre — because the story of a tsunami is how far the water travelled.
- Fly the great tsunamis. Seven stops: 1755 Lisbon, 1883 Krakatau, 1946 Aleutian, 1960 Great Chilean, 2004 Indian Ocean, 2011 Tohoku and 2022 Hunga Tonga. Each opens its live record. In 3D the camera flies to each one over real terrain.
The data — where it comes from
One live federal service and one anonymous basemap — free end to end, and nothing cached in the app.
| Source | What it provides | Refresh | Cost | Attribution |
|---|---|---|---|---|
| NOAA National Centers for Environmental Information / World Data Service — Global Historical Tsunami Database, via the Hazel hazard service (www.ngdc.noaa.gov), queried live | 3,135 tsunami events (date, location, cause code, validity, earthquake magnitude and depth, maximum water height, deaths, injuries, houses destroyed, run-up count) and 35,103 run-up observations (location, run-up height, distance from source, travel time) | Live — every map draw and every count is a fresh query; no snapshot is bundled | Free (no API key) | NCEI/WDS Global Historical Tsunami Database, NOAA National Centers for Environmental Information, doi:10.7289/V5PN93H7. A work of the US federal government — public domain in the United States. |
| Esri ocean basemap (anonymous) | Bathymetric basemap under both layers, in 2D and 3D | Vendor-managed | Free (no API key) | Esri attribution renders in-map automatically |
| Esri world elevation (anonymous) | Terrain under the 3D scene | Vendor-managed | Free (no API key) | Esri |
How it was assembled
The application is a fully static single-page app with no backend, no database and no bundled dataset. The stack: TypeScript, ArcGIS Maps SDK for JavaScript 5.1.x, Calcite Design System 5.x, and Vite 8.
Key engineering decisions
The zero-copy, zero-credential design
- The service is a plain JSON API, not a feature service, so the catalogue becomes a client-side layer. There is no definitionExpression to push down and no layer URL to point at. The 3,135 events are fetched once at boot into a client-side FeatureLayer, after which every filter is a local query that costs no network at all.
- itemsPerPage is capped at 200. Anything larger is rejected outright, so the full catalogue is 16 paged requests and the 2011 Tohoku run-ups are 33 — 3.1 MB in about three seconds at six requests in flight. That is the worst case in the entire database: only four of the 3,135 events have more than a thousand run-ups, and 656 have none at all.
- The run-up endpoint ignores the year filters. Passing minYear and maxYear to /runups returns all 35,103 rows regardless, which is a quiet way to draw the wrong data. Only tsunamiEventId actually filters, so that is the only thing the app sends.
- Clustering is not decoration. 2,669 individual markers at global scale is a smear across the Pacific rim, so a FeatureReductionCluster collapses them into counted bubbles and is swapped off once the view passes regional scale.
- The 3D arcs are deliberately not draped on the terrain. They carry their own elevation and are drawn at absolute height with screen-space line symbols. Draped geometry is re-tessellated on every terrain level-of-detail change, and a camera flight crosses many of them — the documented cause of the fly-to stutter this portfolio spent a wave of work removing. Lifting the arcs off the ground removes the failure mode rather than mitigating it.
- Arcs are capped at the 400 tallest run-ups, and the card says so. Every run-up point is drawn; the arcs are polylines, and 6,406 of them at 24 vertices each would hand the tessellator around 154,000 vertices. The tallest run-ups are also the ones worth looking at, so the cap costs nothing in meaning.
- The century chart is counted in the browser, because the service has no statistics endpoint. It is an exact count of the filtered set, not a sample or an estimate — and it is honest about being computed locally rather than server-side.
- Every number on screen is the service's. The header counts, the match count, the histogram and the run-up totals are all query results, so the app cannot drift from the database as NOAA revises it.