Skip to content

[FEATURE] Ship tracking map layer (AIS feed) #999

@accius

Description

@accius

Is your feature request related to a problem?

Spun off from #996 — the airplane tracking half of that issue shipped, but ship tracking was deferred because it needs an API key (aisstream.io, MarineTraffic, etc.) which is a separate deploy-config conversation.

Hams who'd find ship tracking useful: anyone working /MM stations, monitoring marine HF nets, supporting maritime mobile ops, supporting events where marine traffic matters (coastal Field Day, Coast Guard support, search-and-rescue exercises).

Describe the Solution You'd Like

A new toggleable map layer with the same server-cache + share-across-users pattern aircraft uses (see server/routes/aircraft.js for the template):

  • Server route GET /api/ships proxying an AIS feed, with a ~30 s cache + stale-on-error fallback + in-flight refresh deduplication
  • Client layer src/plugins/layers/useShips.js with metadata + useLayer export, registered in layerRegistry.js
  • Markers oriented by ship heading, color-coded by AIS ship type (cargo / tanker / passenger / fishing / pleasure / military / other)
  • Popup with name, MMSI, type, speed, destination, last-seen

Feed candidates:

  • aisstream.io — free tier with API key; WebSocket push (would need to be terminated server-side and rebroadcast over our REST endpoint)
  • MarineTraffic API — paid tiers, regional free options
  • AIS Hub — peer-network, requires contributing your own AIS receiver data to access it (not viable for a public install)

Key bit: the layer should be hidden (localOnly or env-gated) if no key is configured, so installs without a key still work. Don't ship a half-functional toggle.

Use Case

  • General HF operation
  • VHF/UHF operation
  • Satellite operation
  • Contesting
  • POTA/SOTA
  • DXing (/MM stations on rare DXCC entities)
  • Emergency communications (situational awareness, Coast Guard exercises)
  • Other: maritime mobile ops, coastal special events, marine HF nets

Would you be willing to help implement this?

  • Yes, I can submit a PR
  • Yes, I can help test
  • No, but I'd use it!

Additional Context

Aircraft tracking from #996 landed in d95908b and is the template — both server and client patterns are already in place. The main novel work for ships is the feed choice + key handling + a more nuanced color/icon scheme for the AIS ship-type field.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions