← Back to the map
Harbor Motion — methodology
How the boat-traffic map of New York Harbor is built. Nothing here is a black box.
What you're looking at
Year is a density heatmap of a full real year (2025): every position report across
the harbor and its surrounding waterways is aggregated into a roughly 100-metre grid and shown as a glow
that brightens where traffic concentrates — the harbor's arteries and busiest berths. It is filterable
by vessel type, and each filter shows the number of distinct vessels in that category. (Color shows
intensity of use, not type.) The 2025 headline also shows "vessel-days" — the number of days each
vessel was present in the harbor, summed across the whole fleet (not a count of individual trips). A day takes the most recent complete day available — the
public NOAA AIS archive is published with a long delay — as of this writing it has not posted any 2026
data, so the latest full day is in late 2025, not today (use Live for right now) — and lets you animate the crossings over 24 hours at a few speeds, or see the whole day
at once as a filterable map. Only vessels actually underway are drawn, so boats sitting at berth or
anchor (and their GPS jitter) don't clutter it.
Live is a real-time radar: vessels broadcasting now leave glowing wakes that fade over
about two hours, building a moving picture of recent harbor traffic as you watch.
Data sources
- Historical: NOAA Marine Cadastre AIS
— daily nationwide AIS (Automatic Identification System) broadcasts, sampled to one position
per minute. We use the 2025 daily files (
ais-2025-MM-DD.csv.zst).
- Live: AISStream.io — a free real-time
AIS WebSocket feed, subscribed to the harbor bounding box. The API key is held server-side in a
Cloudflare Worker and is never exposed in this page.
- Basemap: CARTO dark matter; rendering with
MapLibre GL + deck.gl.
Geographic filter
Both the historical filter and the live subscription use the same bounding box:
longitude -74.28 to -73.70, latitude 40.45 to 40.92.
This covers the Upper and Lower Bay, the Narrows, the Hudson and East rivers, the Harlem River,
Kill Van Kull, Arthur Kill, Newark Bay and the Rockaway approach.
Vessel types
AIS vessel-type codes are collapsed into seven categories (consistent across the legend,
trails and live dots):
| Category | AIS codes |
| Ferries / passenger | 60–69 (incl. cruise) |
| Cargo | 70–79 |
| Tankers | 80–89 |
| Tugs & barges | 31, 32, 52 |
| Sailing / pleasure | 36, 37 |
| Fishing | 30 |
| Other | pilot (50), law/SAR, undefined |
Processing & sampling
- Each national daily file (~8 million rows) is streamed and filtered to the harbor box
(~230,000 rows/day) — the raw file is never stored.
- For the animation, each vessel's track is downsampled: one point per ~4 minutes
while moving, and heavily decimated (~1 point/hour) when anchored or moored below 1 knot,
since the story is movement, not idling.
- A track is split into separate segments whenever there's a time gap longer than 18 minutes
or a position jump larger than ~3 km. This keeps the connecting lines hugging the
water instead of drawing straight "teleport" chords across land from missing or bad AIS fixes.
Segments that never move more than ~200 m are dropped.
- deck.gl's
TripsLayer interpolates linearly between sampled points, so motion
looks continuous even at this spacing.
Known limitations
- AIS is required on most commercial vessels but not all small craft, so recreational traffic is
undercounted (Class B transponders also report less often).
- The source data is already sampled to 1-minute by NOAA; we downsample further for file size.
- AIS has coverage gaps and occasional bad GPS fixes; obviously wrong points outside the box are
excluded by the filter, but minor noise remains.
- Vessel type is self-reported and sometimes blank or miscoded (those fall into "Other").
- The year heatmap counts every position report, so places where vessels linger (ferry terminals,
anchorages) can glow as brightly as the busiest moving lanes.
- Live view shows only vessels currently broadcasting within the box while the feed is connected;
it is not an official navigation source.
- The live view uses a single free AIS feed (AISStream), so it shows fewer vessels than commercial
services such as MarineTraffic that combine many terrestrial and satellite receivers.
Built with public data. Not for navigation.