All Things Spatial
ATS Labs · Esri SDK Showcase · Calcite · experimental

ATS Ghost Fleet

Every charted wreck and obstruction in U.S. waters — 12,660 of them — on one dark map.

What it is

ATS Ghost Fleet puts every charted shipwreck and obstruction in U.S. waters on a single map: 12,660 point features from NOAA's AWOIS (Automated Wreck and Obstruction Information System) database, bundled with the app as a dated snapshot and explored over the Esri Oceans basemap, whose bathymetry does the visual storytelling. The chrome is nautical-noir — ghost-cyan wrecks, amber obstructions, an ink-dark shell.

Its distinction is under the hood: every filter runs through SQL definitionExpressions — first against the source service, now against the bundled snapshot via the ArcGIS SDK's client-side query engine, which implements the same standardized SQL — including a depth-range slider that normalizes feet, meters, and fathoms to feet inside the WHERE clause itself, and a text search that scans vessel names and the raw survey-history narratives together. A live count chip tracks every active filter, a density heatmap toggle reveals where the seafloor is most crowded, and a 'notable wrecks' list surfaces the 110 named vessels with a recorded sinking year — USS New Jersey and USS Virginia (spelled VIRGINA in the AWOIS record), sunk in Billy Mitchell's 1923 aerial-bombing demonstration, both make the cut.

It rewards marine historians, wreck divers, coastal researchers, and anyone who enjoys primary-source narratives — each record carries the original AWOIS survey logbook text. It is also, for ATS, the reference demonstration of a query-smart front end that runs the same SQL whether the records live in a hosted service or in a file shipped with the app.

The experience

On load, roughly 12,600 dots wash across the oceans basemap and the count chip reads "12,660 of 12,660". From there, every control narrows the fleet — and the chip follows:

The custom popup presents a fielded table — depth, position quality, chart number, year sunk — with graceful handling of the many nulls in a 12,660-record archival file, followed by the raw AWOIS survey-history narrative, reproduced as the surveyors wrote it.

The data — where it comes from

The wreck data ships with the app as a dated file; only the basemap and the 3D elevation surface come over the wire.

Data-currency caveat: NOAA's Office of Coast Survey retired AWOIS — it is no longer updated and the AWOIS service has been taken down (see https://www.nauticalcharts.noaa.gov/data/wrecks-and-obstructions.html) — so this is a frozen snapshot read on 2026-09-28 and bundled here for provenance; mariners should use NOAA's ENC Direct for current charted wrecks. Positions inherit the original AWOIS quality codes (High / Med / Low / Poor). Not for navigation.

SourceWhat it providesRefreshCostAttribution
NOAA AWOIS — dated snapshot bundled with the app (public/data/awois-2026-09.geojson, read 2026-09-28)12,660 wreck/obstruction points: record number, vessel term, depth + sounding type, position quality, chart, year sunk, survey-history narrativeFrozen — NOAA retired AWOIS and no longer updates it; histories end in the early 2010s and yearSunk tops out at 2009. Current charted wrecks live in NOAA ENC DirectPublic domain (US federal work)Credit NOAA Office of Coast Survey / AWOIS (retired database, no longer updated; snapshot 2026-09-28); not for navigation
Esri Oceans basemap (anonymous)Bathymetric base that gives the wrecks their contextVendor-managedEsri public basemap serviceEsri attribution renders in-map automatically

How it was assembled

The application is a fully static single-page app — no backend, no database, no server-side rendering. The stack: TypeScript, ArcGIS Maps SDK for JavaScript 5.1, Calcite Design System 5, and Vite 8.

Module map — the codebase is small and deliberate; each file owns one concern:

Key engineering decisions