THE MARITIME ATLASShipwrecks of Nova Scotia Data method

DATA METHOD

Shipwrecks of Nova Scotia

How the records, places and symbols in this atlas were prepared, what they can and cannot tell you, and where every source comes from.

Snapshot: 23 September 2026, version 2026-09-23.v1.

What is mapped

The supplied catalogue research reports 4,939 entries. The prepared snapshot contains 2,020 entries spanning 1583–2001; the other 2,919 catalogue entries have no map position. Since version 1.1 they are still part of the atlas: they count up with the clock (“+ N with no map position”), appear in Explore records and busiest-day views, and each shows why it has no position. There are 449 distinct supplied coordinate pairs. These are official named-feature anchors, not surveyed sinking coordinates. Shared places are aggregated without jitter or invented positions. From 2002 to 2026 the atlas also shows 147 vessel losses reported to the Transportation Safety Board of Canada, 125 of them on the map (see “2002 to 2026: losses reported to the TSB”).

The original research, timeline and sources are preserved in reference/. The supplied wrecks.json remains unchanged in starter/. The derived snapshot embeds its SHA-256 digest. These counts describe this snapshot, not all Nova Scotia shipwrecks or an immutable catalogue total.

Original join and exclusions

The supplied prototype normalizes a wreck location's first comma-delimited phrase (lowercase, punctuation removal, “St.” normalization). It tries a small set of leading location prefixes, matches official GeoNAMES text, and uses a county qualifier to resolve repeated names where possible. It accepts candidates with one distinct coordinate rounded to three decimals, then retains the first original coordinate. Thus “unique” is the prototype's rounded-coordinate criterion, not proof of exact feature identity. No fuzzy matching or distance/bearing conversion is performed here.

Unknown, at-sea, excluded generic names, unmatched and unresolved ambiguous locations are not assigned positions. Missing/unusable years are also excluded by the prototype.

Reason ledger (1.1). scripts/join.mjs is the prototype join, unchanged, extended only to record why each excluded row fails. Run over the retained full catalogue (reference/catalogue-source.json, 4,939 rows, downloaded 23 September 2026) and the retained GeoNAMES snapshot, it reproduces all 2,020 plotted records exactly (name, date, event, wording and position to five decimals); scripts/prepare-catalogue.mjs refuses to write if it does not. Every other row gets one reason:

The result is public/data/unplaced-2026-09-23.v1.json, which records the source digest. No excluded row is given a position.

2002 to 2026: losses reported to the TSB

The museum catalogue ends in 2001, and only 4 of its records fall after 1990. From 2002 the atlas adds vessels lost in Nova Scotia waters, as reported to the Transportation Safety Board of Canada (TSB).

Busiest days

Busiest days count every catalogue record, placed or not, by its exact source date. They count the museum catalogue only. January 1 and the first of each month are left out: the 1st appears 374 times against an average of 139 for other days, so many such dates may stand for a year or a month only. The five busiest remaining days are 24 August 1873 (54 records, 28 on the map), 29 October 1879 (18), 21 August 1873 (17), 13 October 1891 (17) and 4 September 1870 (14). Day-level precision remains unverified, so these are counts of recorded dates, not confirmed single storms.

Specificity refinement

scripts/prepare-data.mjs enriches every supplied record with the official feature name/type from a separately retained GeoNAMES snapshot, using the supplied coordinate rounded to five decimals and normalized original first phrase. All 2,020 records found a feature in this snapshot. Coordinates and original wording are never changed.

These are transparent heuristic display classes, not surveyed precision estimates. A small harbour may still be extensive. “Broad” intentionally includes islands whose size varies. A complete manual gazetteer audit remains future work. reference/classification-review.csv lists every record and decision. Symbols have fixed screen-space sizes; no halo purports to define an actual area, distance or confidence interval. Groups use the most conservative class among their records. Individual detail views retain each record's own class.

The complete original location text is shown, including distances, bearings, entrances and uncertainty. Qualifiers are not turned into positions. A selected marker opens every visible record at that anchor; a hit area containing multiple anchors opens all those nearby groups. The accessible record browser provides the same records without requiring map interaction. Lists are paginated, searchable and counted.

Coastline correction

The starter's Statistics Canada Digital Boundary File contains coastal water areas, so it is unsuitable as a shoreline. This build replaces it with the 2021 Cartographic Boundary File, which excludes coastal waters. Nova Scotia, New Brunswick and Prince Edward Island supply geographic context. Modern boundaries are not period-accurate historical shores or navigational charts.

Source: https://geo.statcan.gc.ca/geo_wa/rest/services/2021/Cartographic_boundary_files/MapServer/0

Download query: where=PRUID IN ('12','13','11'), outFields=PRUID,PRNAME, outSR=4326, maxAllowableOffset=0.0006, geometryPrecision=5, f=geojson. The server generalizes by approximately 0.0006 degrees for screen use. The retained response is reference/coastline-source.geojson; the browser uses its identical versioned copy. License: Open Government Licence – Canada, as stated in service metadata.

Guide: https://www150.statcan.gc.ca/n1/pub/92-160-g/92-160-g2021001-eng.htm

All land and points share a spherical Lambert conformal conic projection, standard parallels 44° and 46° N, central meridian 63° W, latitude of origin 45° N. A single uniform scale fits the viewport, retaining local geographic proportions; no independent x/y stretching. Sable Island and all supplied anchors are included in fitting. It is a regional illustrative map, not survey-grade geodesy. No terrain or bathymetry is invented.

Neighbouring land

So the region does not float alone, the map also draws Maine, New Hampshire and Massachusetts, and Quebec and Newfoundland and Labrador. They are context only: no records sit there, and the map's fit and projection are unchanged.

Both are requested with maxAllowableOffset=0.002 (coarser than the 0.0006 used for the three atlas provinces), outSR=4326 and geometryPrecision=5 by scripts/fetch-context.mjs, and retained as reference/us-states-source.geojson and reference/context-provinces-source.geojson. scripts/prepare-context.mjs clips them to 72° W–54° W and 40.5° N–50.5° N, far beyond any view so the cut edges never show, drops islets under about 300 m across, and writes public/data/context-2026-09-23.v1.geojson. Modern boundaries are shown, as for the Canadian provinces.

Map overlays

The map can draw real land shape under the lights. A switch under the legend picks one of four styles: Plain, Relief, Relief + sea floor (the default) and Satellite. The browser remembers the choice. Overlays change only the still base map; the lights, labels, event marker and arrow draw on top as before.

Time and light

Historical year = 1583 + 443 × elapsed / 20000, about 45 ms a year. Membership uses source year, not day. There are 274 January 1 source dates among plotted entries; day-level precision is unverified, not asserted to be a known placeholder. Details label the original date field accordingly.

Playback uses a monotonic wall-clock anchor and clamps at exactly 20,000 ms; the last rendered frame arrives on the next browser animation frame. There is no delta cap, easing of historical time or automatic looping. Pausing preserves fractional elapsed time. Seeking pauses and derives membership afresh. Each arrival at a place starts a 650 ms pulse. An arrival during a running pulse joins it instead of restarting it, so busy places such as Sable Island show whole pings rather than a frozen first frame. Coincident arrivals aggregate and intensity is capped. A broad-area ping brightens its halo and sweeps 14 px past the halo's edge. A new arrival shows red for the first half of its ping, about 0.3 s, then fades back to the usual gold. New names in the wreck log glow gold for the same moment; only the map turns red. Dim marks persist. Reduced-motion users initially see the complete map; intentional playback changes the year without pulses.

Catalogue density is affected by collection and matching coverage. It is not a verified change in loss rates. The clock ends in 2026, the snapshot year; the last TSB record is from June 2026.

Halifax Explosion marker

Version 1.1 adds one sourced editorial marker, stored separately in public/data/events-2026-09-23.v1.json. It adds no record: the plotted total stays 2,020 of 4,939.

Wreck log and flags

The wreck log beside the map lists every dated catalogue record by name as the clock reaches its year, newest first. It is drawn from the same clock as the lights, so play, pause, seeking and replay keep it in step. Within a year, records follow their source dates. The log shows the newest 100 names; during the busiest decades hundreds arrive in a second, so it is readable when paused. The catalogue's trailing " - year" is dropped from names, and the six names recorded only as “unknown -” read “Name unknown”.

The open catalogue has no flag or nationality field, and only 5 of 4,939 rows give a port of registry. A ship's country therefore comes from one of these, in this order:

Checking the sources found one error in the catalogue: “HMS Clayoquot - 1944” was a Canadian navy minesweeper. The museum's page gives its registry as “Canadian Navy, Canada” and calls it HMCS Clayoquot. It shows the Canadian flag, and its details say why. The sourced list and the name prefixes alone give 31 British, 8 Canadian, 2 French and 1 Norwegian ship; the museum pages add the rest. No flag is guessed from a name, a port of build or a voyage.

The picture is the country's national flag in use on the wreck date, not always the ensign the ship flew. For example, Royal Canadian Navy ships flew the White Ensign at the stern from 1911 to 1965, and French merchant ships flew a blue flag with a white cross until 1765. The source often uses today's country names (“United Kingdom” for a 1797 frigate), so the date decides the picture:

The flags are simple drawings in public/flags/, one file per flag, each with its name in a title. The log, the record details, the Halifax Explosion view and the map labels use the same files. On maps narrower than 600 px the ship line under the Halifax Explosion label is left out, because it crowds the Titanic label; the log and the event view still show both flags.

Ship facts from the museum's pages

The museum's live Marine Heritage Database was retired in early 2024. The Internet Archive kept its detail page for every one of the 4,939 records, almost all captured in November 2006. npm run fetch:registry (scripts/fetch-registry.mjs) downloads them one at a time, 4 seconds apart, into .cache/mma-archive/ (not in git). reference/mma-archive-manifest.csv records each page's capture time and SHA-256, and the next step refuses a page that does not match it.

scripts/prepare-registry.mjs reads the pages and writes public/data/registry.v1.json:

Titanic arrow

The catalogue lists “Titanic - 1912” as sunk on 1912-04-15 in the “Atlantic Ocean”, so it has no map position. An arrow at the map edge points toward the reported position given by the Maritime Museum of the Atlantic, 41°46′ N, 50°14′ W. The arrow sits where the line from the GeoNAMES point for Halifax toward that position leaves the frame, and its label gives the date and the straight-line distance from Halifax (1,127 km). No track is drawn and no wreck position is placed on the map. The arrow appears on 15 April 1912 itself, 14.87 s into the run, using the date's fraction of its year; reduced motion shows it without the slide. The pointer is stored in the events file with its source; hover, tap or its legend button opens the catalogue record and the museum's summary: struck an iceberg at 11:50 pm on 14 April and sank 2 hours 40 minutes later; recovery ships found 328 bodies; Halifax buried 150 victims in three cemeteries.

Offline playback and safe rendering

All data files are bundled, versioned and fetched from the same local origin. There are no live APIs, map tiles, external fonts or analytics in playback. Dataset strings are rendered with textContent, never interpreted as HTML. API downloads occur only when the explicit maintenance script is run. Runtime data validation and retry UI handle loading failures.

Primary sources

Government of Nova Scotia provides wreck records and place names. Statistics Canada provides coastline geometry. See the source sites for their current reuse terms before publication.