feat(layers): add shipwrecks layer (EMODnet + Wikidata)

A new Events layer maps shipwrecks with a card per wreck:
- EMODnet Human Activities heritage shipwrecks (about 6,500 in European
  waters, CC BY 4.0), skipping rows taken from wrecksite.eu.
- Wikidata shipwrecks with a Wikipedia article plus sinking events
  (CC0); an event folds into its ship for the date and death toll.
- A same-origin /api/shipwrecks proxy refreshes once a day and serves
  the last snapshot as stale for up to a week.

Markers are a boat icon coloured by era and sized by deaths; four era
chips filter the layer. The card follows the air-accidents layout
(deaths first). Text that names people is dropped; victims appear as
a count only.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Itallo BrandãoandClaude Opus 5.5 committed 2026-11-05 04:42:59 -03:00
1 parent 7d8b80db0a
commit dcd0f2cccd
41 files changed
+2168 -73

No files matched your search

+5 -1
View File
@@ -1267,5 +1267,9 @@
"src/voice/geminiTextChat.js",
"src/voice/panelLayout.js",
"src/voice/textChat.js",
"src/voice/textProtocol.js"
"src/voice/textProtocol.js",
"src/layers/shipwrecks/records.test.mjs",
"src/layers/shipwrecks/cards.test.mjs",
"src/layers/shipwrecks/eras.test.mjs",
"src/data/shipwrecksProxy.test.mjs"
]
+24
View File
@@ -2939,6 +2939,12 @@
"src/layers/ghostMaps/records.js",
"src/layers/ghostMaps/kml.js",
"src/layers/ghostMaps/source.js",
"src/app/layers/shipwrecks.js",
"src/layers/shipwrecks/index.js",
"src/layers/shipwrecks/source.js",
"src/layers/shipwrecks/records.js",
"src/layers/shipwrecks/cards.js",
"src/layers/shipwrecks/eras.js",
"src/app/layers/droneAirspace.js",
"src/layers/droneAirspace/index.js",
"src/layers/droneAirspace/source.js",
@@ -3690,6 +3696,12 @@
"src/layers/ghostMaps/records.js",
"src/layers/ghostMaps/kml.js",
"src/layers/ghostMaps/source.js",
"src/app/layers/shipwrecks.js",
"src/layers/shipwrecks/index.js",
"src/layers/shipwrecks/source.js",
"src/layers/shipwrecks/records.js",
"src/layers/shipwrecks/cards.js",
"src/layers/shipwrecks/eras.js",
"src/app/layers/droneAirspace.js",
"src/layers/droneAirspace/index.js",
"src/layers/droneAirspace/source.js",
@@ -4751,6 +4763,12 @@
"src/layers/ghostMaps/records.js",
"src/layers/ghostMaps/kml.js",
"src/layers/ghostMaps/source.js",
"src/app/layers/shipwrecks.js",
"src/layers/shipwrecks/index.js",
"src/layers/shipwrecks/source.js",
"src/layers/shipwrecks/records.js",
"src/layers/shipwrecks/cards.js",
"src/layers/shipwrecks/eras.js",
"src/sources/httpBody.js",
"src/data/geoFileImport.js",
"src/i18n/marker.js",
@@ -4778,6 +4796,12 @@
"exports": ["./layers/ghostmaps/source"],
"modules": [
"src/layers/ghostMaps/source.js",
"src/app/layers/shipwrecks.js",
"src/layers/shipwrecks/index.js",
"src/layers/shipwrecks/source.js",
"src/layers/shipwrecks/records.js",
"src/layers/shipwrecks/cards.js",
"src/layers/shipwrecks/eras.js",
"src/layers/ghostMaps/catalog.js",
"src/sources/httpBody.js",
"src/i18n/marker.js"