feat: Wildlife Sightings layer from iNaturalist and Acartia

Recent community wildlife observations, as a new Wildlife group in the
layer panel.

- Server: keyless iNaturalist proxy (v2 observations with only the
  projected fields; undocumented v1 UTFGrid density tiles, decoded on the
  server) sharing one paced queue (burst 4, ~1/s, 60/min, 8,000/day budget,
  up to four in flight), in-memory caches and upstream-only cooldowns;
  Acartia Salish Sea marine-mammal feed rounded to 0.01 degrees with
  comments dropped.
- Layer: grid counts drawn as a soft view-ranked density glow; real sampled
  sightings as taxon badges at their true positions with ambient photo
  thumbnails and labels; obscured records stay privacy cells; a clicked
  sighting stays pinned through camera moves and refreshes.
- Anchored photo card per selection with the single iNaturalist link;
  attribution in the layer row and the Data attribution popover.
- Filters (CONFIRMED, taxa presets) round-trip in share links with token 9.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Yehe LiuandClaude Opus 5.5 committed 2026-11-05 16:17:12 -05:00
1 parent edd6212793
commit 14f88b3e08
120 files changed
+21260 -285

No files matched your search

+69 -7
View File
@@ -4,10 +4,12 @@
"978 MHz UAT",
"AIS: --",
"AIS: {name}",
"Acartia",
"BRG {value}°",
"BRG —",
"CAL {value}",
"CAL · {badge}",
"CC BY 4.0",
"CCTV",
"CRS {value}°",
"CRT",
@@ -28,8 +30,11 @@
"SRC {value}",
"Sentinel-2",
"WHOT/BHOT",
"acartia.io ↗",
"dB",
"hPa",
"iNaturalist",
"iNaturalist ↗",
"{source} HTTP {status}",
"▲ {frp} MW"
],
@@ -40,6 +45,7 @@
"AIS: {name}",
"ANIME",
"AUTO",
"Acartia",
"Alternative",
"Ambient",
"Anime",
@@ -50,6 +56,7 @@
"Bloom",
"Blues",
"Bus",
"CC BY 4.0",
"CCTV",
"CHAT",
"COCKPIT",
@@ -178,11 +185,14 @@
"WSW",
"Washington DC",
"Wind",
"acartia.io ↗",
"dB",
"feed status|live",
"fire behavior|Minimal",
"ft",
"hPa",
"iNaturalist",
"iNaturalist ↗",
"km",
"km/h",
"min",
@@ -334,15 +344,24 @@
"≥ {value} MW",
"ΔE",
"ΔN",
"▲ {frp} MW"
"▲ {frp} MW",
"ANIMAL · {name}",
"Acartia",
"CC BY 4.0",
"Reptiles",
"acartia.io ↗",
"iNaturalist ↗",
"iNaturalist"
],
"fr": [
"1090 MHz",
"978 MHz UAT",
"ALTITUDE",
"ALTITUDE · FT",
"ANIMAL · {name}",
"ANIME",
"AUTO",
"Acartia",
"Action",
"Allocation",
"Altitude {altitude}",
@@ -361,6 +380,7 @@
"CALIBRATION",
"CARGO",
"CAUSE",
"CC BY 4.0",
"CCTV",
"CCTV OFF",
"CCTV ON",
@@ -437,6 +457,7 @@
"OK",
"ON",
"ON/OFF",
"Obs. {licence}",
"Oldies",
"PAUSE",
"POSITION {age}",
@@ -452,8 +473,10 @@
"RADAR · {units}",
"RADIO",
"REC",
"REPTILE · {name}",
"Radio",
"Reggae",
"Reptiles",
"Rock",
"S2 GhostMaps",
"SAR",
@@ -488,10 +511,13 @@
"VOLUME",
"VS",
"WHOT/BHOT",
"acartia.io ↗",
"audio {state}",
"dB",
"ft",
"hPa",
"iNaturalist",
"iNaturalist ↗",
"image",
"installation class|BASE",
"installation class|INSTALLATION",
@@ -694,17 +720,24 @@
"≥ {value} MW",
"ΔE",
"ΔN",
"▲ {frp} MW"
"▲ {frp} MW",
"Acartia",
"CC BY 4.0",
"acartia.io ↗",
"iNaturalist ↗",
"iNaturalist"
],
"ja": [
"1090 MHz",
"978 MHz UAT",
"AIS: --",
"AIS: {name}",
"Acartia",
"BRG {value}°",
"BRG —",
"CAL {value}",
"CAL · {badge}",
"CC BY 4.0",
"CCTV",
"CH {index} / {total}",
"CRS {value}°",
@@ -729,9 +762,12 @@
"Sentinel-2",
"USB {rate} msg/s",
"WHOT/BHOT",
"acartia.io ↗",
"dB",
"ft",
"hPa",
"iNaturalist",
"iNaturalist ↗",
"km",
"km/h",
"kt",
@@ -877,11 +913,19 @@
"{value} KM/S",
"ΔN",
"▲ {frp} MW",
"≥ {value} MW"
"≥ {value} MW",
"ANIMAL · {name}",
"Acartia",
"CC BY 4.0",
"acartia.io ↗",
"iNaturalist ↗",
"iNaturalist"
],
"ru": [
"AIS: --",
"AIS: {name}",
"Acartia",
"CC BY 4.0",
"CCTV",
"CRT",
"FLIR",
@@ -895,11 +939,16 @@
"S2 GhostMaps",
"S2 · {name}",
"VS",
"WHOT/BHOT"
"WHOT/BHOT",
"acartia.io ↗",
"iNaturalist",
"iNaturalist ↗"
],
"uk": [
"AIS: --",
"AIS: {name}",
"Acartia",
"CC BY 4.0",
"CCTV",
"CRT",
"FLIR",
@@ -908,7 +957,10 @@
"NVG",
"REC",
"S2 GhostMaps",
"WHOT/BHOT"
"WHOT/BHOT",
"acartia.io ↗",
"iNaturalist",
"iNaturalist ↗"
],
"zh-CN": [
"1090 MHz",
@@ -966,7 +1018,12 @@
"≥ {value} MW",
"ΔE",
"ΔN",
"▲ {frp} MW"
"▲ {frp} MW",
"Acartia",
"CC BY 4.0",
"acartia.io ↗",
"iNaturalist ↗",
"iNaturalist"
],
"zh-Hant": [
"1090 MHz",
@@ -1024,6 +1081,11 @@
"≥ {value} MW",
"ΔE",
"ΔN",
"▲ {frp} MW"
"▲ {frp} MW",
"Acartia",
"CC BY 4.0",
"acartia.io ↗",
"iNaturalist ↗",
"iNaturalist"
]
}