Esc

bikemap.nyc

About

bikemap.nyc is a visualization of the entire history of Citi Bike, the largest bike-sharing system in the US.

Each moving arrow represents a real bike ride, based on anonymized historical system data published by Lyft. The animation plays at 150x normal speed and covers 291.2 million trips in New York City since 2013.

If you have ever used Citi Bike, you are part of the art. Use your Citi Bike receipt to find your ride.

E-bikeClassic bikeBike unlockedBike docked

Limitations

The data only contains the start and end station for each trip, but does not contain the full path. Route geometries are computed for each (start station, end station) pair using the shortest path from OSRM.

This means that the computed routes are directionally correct but inexact. Trips that start and end at the same station are filtered out since the route geometry is ambiguous.


Technical Details

  • No backend — Processed data is stored in Apache Parquet files and queried by DuckDB WASM directly in the browser.
  • GPU rendering — Deck.gl is cracked and makes it possible to render thousands of concurrent bikes with the GPU.
  • Worker threads — Heavy precomputation is done on Web Workers to offload CPU load from the JS main thread.
  • Continuous streaming — Trips load incrementally and invisibly in 30-minute batches.

Why

I built this project because I think it is cool and beautiful... and I was procrastinating my exams.

I'm open-sourcing the entire data processing pipeline and visualization code at freeman-jiang/bikemap.nyc.

I hope to keep this project running indefinitely, but I'm paying for Mapbox and hosting costs out of pocket. If you'd like to support me, please consider buying me a coffee!


freeman-jiang·@freemanjiangg