NYC Transit Time Map: how does it work?

My favorite thing about the NYC subway map is how it's not geographically accurate—it disorts the sizes and shapes of boroughs to make the map easier to read. I thought it might be fun to make a subway map that distorts geography an a different way: based on travel times between stops.

All the data that went into the map comes from the MTA's GTFS feed, which provides information about routes, stops and schedules.

The map is rendered using D3 — initially, acccording to the latitude and longitude of each stop. But when you click a stop, a simulation is run to calculate the travel time from that stop to every other stop. Using train departure times from the MTA, and the MTA's predicted transfer times within stations, the code counts how many minutes it takes for a simulated passenger departing the selected stop at 8:00 on a weekday would arrive at each stop on the map. [You can see the code for this on Github — the simulation is done in virtual_rider.js].

Once travel times are computed, positioning each stop is done by measuring the geographic angle from the selected stop to each other stop, but adjusting the distance from the selected stop so that it's proportional to travel time.

For more technical details, see the Readme on GitHub.