WakeAtlas: a non-commercial maritime explorer built with CesiumJS

Hello Cesium community! I would like to share WakeAtlas, a non-commercial maritime explorer I have been building with help from Codex.

Try it: https://wakeatlas.uk/ — the globe and catalogue can be explored without an account.

CesiumJS provides the globe and 3D rendering foundation. Around it, we have built a Python/FastAPI and PostgreSQL/PostGIS backend bringing together vessel reports, historical tracks, ports, satellite cloud imagery, weather and lightning layers, bathymetry, and a growing ship catalogue with photographs and sourced specifications. Thank you to the Cesium team and community for making that foundation available.

Some of the practical work has been about keeping the globe useful as the data grows: viewport-aware vessel queries instead of sending every report to the browser, expiring old AIS markers from the normal view while retaining their history, and requesting closer weather samples as users zoom in. We also keep detailed land imagery independent from optional seabed shading.

Data honesty is a big part of the design. Coverage varies, image dates and resolutions vary, and delayed satellite observations are kept distinct from recent AIS. We show sources and observation ages rather than suggesting every marker is a confirmed current location.

This is an early public preview, not a navigation service. I would particularly welcome feedback on globe performance, layer controls, and making overlapping imagery sources clearer to visitors. Our longer-term hope is to improve open-ocean coverage through satellite AIS with explicit permission for public, non-commercial display; leads on suitable programmes would also be welcome.

Vessel reports around north-west Europe:

Ship catalogue with photographs, sources and report ages:

Photo credits: Muikku — MKFI, public domain; Norröna — Erik Christensen, CC BY-SA 3.0; AIDAsol — Wolfgang Fricke, CC BY 3.0. Map attribution remains visible in the globe screenshot.

A small WakeAtlas update: we’ve added animated wind streaks and translucent wind-speed shading to the Cesium globe. This view shows the UK and surrounding waters alongside AIS vessel reports.

The wind comes from ECMWF’s open forecast data, with a forecast-time slider and adjustable streak density. Rendering happens in the browser; the server caches the forecast fields. It’s forecast visualisation, rather than live wind measurements.

Wind data: ECMWF open data, CC BY 4.0. Map imagery credits are shown in the screenshot.

A performance update from WakeAtlas: panning and zooming through busy shipping areas now feels much more immediate.

The biggest bottleneck turned out to be replacing thousands of ship graphics when the view changed. We moved the markers into a reusable Cesium BillboardCollection pool: ships leaving the view release their slots, and incoming ships reuse them. We also moved ship-data preparation into a Web Worker and added a server-side RAM cache of the latest positions, with PostgreSQL retaining the authoritative records.

In a large regional view change with roughly 9,400 ships, the measured marker-update work dropped from about 4.3 seconds to 35 milliseconds in our browser checks. That’s the graphics-update portion, not total loading time, and the live records weren’t identical between runs—but the difference when moving around the globe is striking. Ship selection and live position updates still work.

We’ve also added a “Maximum ships shown” setting, from 5,000 to 50,000, remembered per browser. The default stays at 10,000 so visitors can choose a level that suits their hardware. The 50,000-marker pool passed three local test runs, although larger view changes naturally cost more than at 10,000.

You can try it at https://wakeatlas.uk/ under “Filter ships”. I’d be interested to hear how others handle large, frequently changing billboard collections in Cesium, especially on less powerful devices.

The globe with the 50,000-ship limit selected; about 38,800 vessels match the last-hour filter in this capture.