02 March 2016

Why I made a Seattle transit isochrone map generator

I made a Seattle transit isochrone map generator. You should check out this example of what it can do to fully understand what this post is about.


How do you use public transportation?

When I take the bus to work, I leave any time between 8 AM and 11 AM, more or less randomly. When I do leave, I don't check the bus schedule before I go. Once I've locked up the house, I'll put my work address into Google Maps and see which route it suggests I take. Then I'll double-check the real-time arrival times provided by OneBusAway as I start to walk to the stop, and potentially choose to reroute to another stop. When I leave work and go home, some time between 4 PM and 8 PM, I basically use the same strategy.

But that's not the only way I use public transportation. I'll go from my home in Wallingford to visit friends in Capitol Hill or the Central District using one or more buses. Sometimes I'll take a series of buses (and now a streetcar too) to Little Saigon to get produce, or a couple of buses (or potentially a bus and light rail) to get to a Grocery Outlet in Madrona or SODO for other sundries. Sometimes I'll use the bus to go directly from work to Georgetown to pick up brewing supplies and then head on home. I use public transportation to go pretty much anywhere.

For these other trips, even though they potentially involve making a connection between two different vehicles, I still do absolutely minimal planning. I rely on the public transportation system to be able to support a broad variety of largely spontaneously-timed trips and most of the time it works fine. I have a car, but outside of hiking trips, hauling building supplies and furniture, and larger grocery loads, I don't use it very often.

I think that many—perhaps even most—people do not use public transportation in this same way. Some people only rely on it to get to work, using peak-hour buses, or a ferry where there are only a few trips spaced at fairly infrequent intervals. They need to be ready by a certain time or wrap up work by a certain time in order to commute. They cannot use public transit in a spontaneous way. A lot of people are averse to transfers and only take public transportation to destinations that they can reach directly. That makes them car-dependent for a large number of trips.

I don't want to invalidate the needs or preferences of people who, for whatever reason, adhere to a rigid schedule or do not consider public transportation for all of their destinations. I don't want to say that I'm right and anyone who uses public transportation differently is wrong. But I do want to take the stand that if a public transit agency gives sole focus to these users, it will stagnate. It will serve well the people who already use it, but it will not induce people to use it for anything other than their pre-scheduled trips. In my mind, effective public transit should challenge people to view their cars as an optional convenience rather than the only thing that brings them travel flexibility. After all, if the transit network serves spontaneous trips all over the city well, it serve schedule adherents or more-than-occasional drivers just as well.

The way I use public transportation does not answer the question of why I made a Seattle transit isochrone map generator. An isochrone map generator is not really useful for deciding what bus to take on a given day. The tools for that already exist. This is a different sort of tool.


I've lived in Seattle for about four and a half years. I've been using public transit all that time. For reasons I can't fully explain, I don't just find public transportation useful but intrinsically neat and interesting.  But only recently have I gotten interested in public transit policy. I think part of that distinction is that a public transit network can seem like a static thing most of the time. Sure there have been frequency cuts and a subsequent frequency buy-back by the city, but most of the time the routes don't change very much. However, a recent set of changes known as Link Connections grabbed my attention.

For those outside of Seattle, or those who value their time enough not to follow the intrigue of transit policy, here's a brief rundown of public transit in Seattle. Bus service in Seattle is operated by King County Metro, which operates bus service for all of King County. King County Metro operates a variety of route types: point-to-point routes within the city of Seattle, peak-hour express routes designed to get commuters in and out of the city from the suburbs, and less frequent point-to-point routes outside of the city. The other big player in the region is Sound Transit. Sound Transit is a three county agency with jurisdiction in King County, Snohomish County to the north, and Pierce County to the south. Sound Transit operates longer-range commuter buses, but is best known for the its light rail line, called the Link, that runs from SeaTac Airport to downtown Seattle. In mid March, Sound Transit will open an extension that provides stations in Capitol Hill and the southeastern edge of the University of Washington campus.

Link Connections is King County Metro's attempt to better synchronize its network with the new frequent, reliable light rail service that will exist between the university, Capitol Hill, and downtown. The idea is that some bus routes that once went between or near the stations on their way downtown can be truncated at these stations. Riders can continue to their final destinations on the light rail. Even with the transfer, the hope is that operating part of the trip in a grade-separated vehicle with fewer stops will make the trip faster than the former one-seat ride.

Link Connections started with King County Metro publishing two plans for route restructures, known as Alternative 1 and Alternative 2. Alternative 1 was a pretty radical restructure. It redirected almost every route in Capitol Hill to serve the light rail station, it greatly reduced the bus capacity between downtown and Capitol Hill in anticipation of most riders using the light rail between those two locations. This had the benefit of giving many routes frequencies better than 15 minutes midday and under 10 minutes at peak times. In northeast Seattle it reduced to peak-only service many routes that connected neighborhoods to downtown, truncated many all-day routes at the light rail station, and consolidated some routes on parallel paths into single corridors with 15 minute frequencies rather than half-hour ones. Alternative 2 was far less ambitious. It terminated fewer routes at the light rail stations and generally made fewer consolidations and modifications.

Around this time, I started reading the Seattle Transit Blog and had been turned on to several talks by transit consultant Jarrett Walker. Many of the Seattle Transit Blog authors and commenters seemed to like Alternative 1. It also created a network more resembling a grid and created new high frequency corridors where few existed before. The more I thought about it, the more Alternative 1 seemed like a really inspired and forward-thinking set of changes. It made a lot of sense to me because it was extremely compatible with the way that I use public transportation. Higher frequency would mean that even if I arrived at the bus stop at the least optimal time, the bus would arrive sooner and I'll ultimately get to my destination earlier. A more grid-like network, less focused on shuttling people downtown, would better meet my desire to get anywhere in the city within a reasonable amount of time.

Alternative 1 was not without problems. Many questioned the feasibility of transfers at the University of Washington station as few buses actually stopped directly at it. There was a fear that combining certain segments of routes would hurt the reliability of currently-reliable routes. A community group was rumored to be fighting the decision that buses would no longer collectively traverse the full length of Madison Street. Some felt as though the consolidation of corridors was done without respect to the hilly geography of Capitol Hill.

As straightforward as the aims of Alternative 1 and Alternative 2 seemed, the followup plans seemed increasingly confused and reactionary. An Alternative 3 largely held the Alternative 1 line in northeast Seattle, but restructured the Capitol Hill routes in strange ways, some seemingly antithetical to the goal of connecting adjacent neighborhoods to the light rail. A subsequent proposal rolled back many of these changes, in the process restoring much of the bus capacity between downtown and Capitol Hill and making several routes take a bizarre detour onto Madison Street. This proposal was submitted to the King County Council, which holds final authority on any large restructures. The chair of the transportation committee, citing community concerns, restored, in reduced capacity, two routes that had been cut in every previous plan. This further diluted the goal of consolidation, as the operating budget for these restored routes would ultimately have to come out of capacity allocated for the new consolidated routes. After approval, the planned Madison Street deviation was found to include a turn too tight for a bus to make, forcing its elimination. A later administrative change moved an additional route in Capitol Hill closer to the station. By the time everything was agreed upon, northeast Seattle resembled Alternative 1 with a couple of artifacts from the current service pattern and Capitol Hill received changes that were only slightly more ambitious than the original Alternative 2.

I felt frustrated by this. It seemed as though a well-formed plan had been watered down by well-meaning but loss-averse citizens, community groups, and politicians. It seemed as though, in the face of criticism, King County Metro had acquiesced to demands rather than responding with data to criticism rooted in anecdotes. Reading some of the comments on Seattle Transit Blog posts, I did not feel alone in this feeling of frustration and loss. What I observed among some Alternative 1 proponents was a sense of cynicism that attributed these modifications to "politics". That didn't sit well with me. Blaming "politics" seemed cheap and simplistic, falling back to the cliché of government as a blundering bureaucracy. It invalidated the positions of the individual people who felt a sense of concern and loss by the restructure and argued for modifications. As right as I felt about Alternative 1 being a better solution, I did not feel as though I was in a position that I knew enough to invalidate anyone's feelings.

While these changes were in flight, I was giving a lot of thought to how I would restructure the Capitol Hill network. I set the goals of being sensitive the hilly nature of the region,  minimizing cases where riders would need to start by going in one direction to ultimately go in the opposite direction, and holding a hard line on only running minimal capacity on paths that were well-served by the light rail. As I started drawing these networks, I realized that I had a big problem.

Even if I could draw what I envisioned to be the perfect network, I had no way to convince myself that it would actually be better in practice. Just drawing lines on a map and calculating reasonable frequencies given the existing amounts of bus service would give me an idea of this, but no concrete proof. Furthermore, if I were to propose it as a viable solution, I would not actually be demonstrating its value to skeptical observers. I would be susceptible to the same sort of commentary that, in my mind, undermined Alternative 1. I could argue that it was more grid-like and connected many neighborhoods to high frequency routes. But, when a bus route is targeted for elimination, those reasons are unlikely to resonate with people who have a bus that they consider their bus and take every day. There's so much ambiguity and very little interactivity in the typical transit map. Sure different line styles can show frequency characteristics, but having to reason about transfers with such a map requires a full timetable. Evaluating such a restructure becomes a burden to the rider, who just knows that their existing bus works well enough. 

One day, though, I was sent a video of a presentation where Jarrett Walker used an isochrone map to support a line of explanation that these sort of maps demonstrate the amount of "freedom" that a public transit network provides. That immediately resonated with me. First, it perfectly described how I use transit. I don't have set routes, so just looking at routes doesn't allow me to analyze the utility I'd get out of a transit network. Meanwhile, an isochrone map shows an abstracted view that emphasizes the extent of the network, something that is immensely useful to me.

It also raised a question about how I felt about the demise of Alternative 1. Was King County Metro's failure to implement Alternative 1 not a failure of "politics", but a data visualization problem? King County Metro's documentation on the Link Connections restructure was a collection of route maps and high level explanations of which alternate routes to use in the event that one's chosen route was on the chopping block. However, these documents were failing to answer a very critical question, if my bus goes away, can I still reach the set of places that I need to go in about the same amount of time as I could before? If a concerned citizen could consider two isochrone maps centered at their home, one of the previous transit system and the other of a proposed replacement, and check that their destinations were in the same or lower time band as before, wouldn't that be more convincing than route lines on a map? Consequently, if the isochrone map showed a marked degradation, that person could raise a well-reasoned, rather than reactionary, complaint. The agency could then consider if the network was wrong to begin with or if improvements to everyone else outweighed this case and something like carpools, an on-demand shuttle, or taxi fare reimbursements could be used as mitigation for the impacted region.

So I started programming an isochrone map generator over the course of a couple of months, grabbing time after work and on weekends. I used King County Metro's Generic Transit Feed Specification files for schedule data and the Google Distance Matrix API for walking distances. The algorithm itself is a fairly basic recursive one, but I spent plenty of time screwing it up. Considerable time also went into performance profiling. Originally, I would leave it overnight to compute a map for one specific time period; now it can compute a full days worth of 30-minute travel maps in a little over 5 minutes. I found out later there are other isochrone map generators out there from WalkScore and Mapnificent, but, while being quality realtime products that run circles around my comparatively pokey generator, they make simplifying assumptions or don't reveal enough about their methodology to feel comfortable abandoning my own project.

I would assume the transit planners at King County Metro have far better tools than what I can program in my spare time. So I'm surprised that the transit planners employed by the agency, who judging from Alternative 1, appear extremely competent and daring, either don't have the tools to generate isochrone maps or don't believe they'll be an effective tool to convince the public of the efficacy of the route systems they've designed. I would love to know what the actual case is. I'm only one data point, but it is something I'd find useful to see.

While the maps are a good visualization tool, they still must be interpreted subjectively. When condensed further, I think they can provide a very useful piece of data. Taking a starting point and simply counting the number of points that can be reached from that point can serve as a naive score for the transit network at that starting point. Choosing a set of randomly selected but geographically diverse points can serve as an overall network score. The score can be refined further by weighting points for their access to jobs, culture, retail, and social services. That way, when a plan is presented, it has an objective measurement, as well as compelling visuals that can back up the merit of the score.

I think using isochrone maps as a core component of transit planning has the potential to invert what is currently a process that seems like it must be frustrating to all sides. Currently, the process appears to work by first having transit planners design a network using some unknown mechanism to evaluate it. Then route maps are revealed to transit riders and community groups, who, looking at any elimination, may doubt that the transit planners understand what is important to them. They suggest changes either directly or by way of insisting the county council amend the plan. As frustrating as those revisions were to me in the case of Link Connections, I firmly believe the public must be involved in the process in a meaningful way. After all, public transportation is financed by, and more importantly is intended to serve, the people. Imagine a process where transit riders and community groups define what the high-level goals of the transit network are—what, in the abstract, are the most important things for it to serve. The politicians on the council can debate and consolidate these goals into publicized, fixed weights. Then transit planners can redraw networks without fear of later meddling, provided they increase the score of the transit network. If people are subsequently unhappy with the transit network, they can evaluate whether the transit planners did not score the network honestly or if the scoring system itself needs work. Everyone has an important role that maximizes their strengths and minimizes their biases. There's no possibility, or even the perception of the possibility, that a rogue transit planner can neglect residents in a given area or that the committee chair can drawing a line on a map to appease a voting bloc.

When I present the idea of a system based around a numeric score, one thing that I worry about is that  is that it will be perceived as inherently harsh and unfeeling. Data-driven processes, at their worst, can be ham-fisted and alienating; I've been on the other side of them. Nonetheless, I feel as though there is an ability in scoring to make less biased decisions. When I was trying to draw a new alternative for Link Connections in Capitol Hill, I was thinking about what could work for me. I try to be aware of what characteristics I have that shape the way I view and exist in the world: I'm male, fairly young, white, and without any mobility or uncorrectable vision impairments. I can climb hills, walk quickly, and run to make a bus. I can stand around at a bus stop at night with little fear of harassment or attack. No one is going to call the cops if I'm walking through their neighborhood. By encoding the restrictions that people face in their lives as selectable parameters in the map generation software, an isochrone map can show a transit planner in a clear way, what the transit network looks like from another person's point of view.

I want to improve my software so that it can make maps that halve the standard walk speed, or not permit transfers after a certain time, or impose a maximum walking distance. Scores can be generated for a transit network given each of these restrictions and factored into a larger composite score. So at this point while I have made a Seattle transit isochrone map generator, I need help to make it into a tool that can actually effect change. I need one question answered, from a diverse set of people, in order to figure out where to go from here:

How do you use public transportation?


  1. Fell asleep during the link connections explanation but barreled through the rest of it.

    I don't often use public transit nowadays. I drive to work. Once in a while I go see Rachel perform, or have something to go to in/near Boston, and then I'll use public transit because I hate driving in the city.

    Generally speaking, I take a bus to Harvard (two buses stop right by my house, and one more stops a ten-minute walk away; the walk to Alewife is 25 minutes and I like to avoid it), then take the subway to my destination. I will plan my trip ahead of time to minimize travel time on the way there, but I will take whatever route I can on the way back (usually subway to Harvard, then bus home). When buses are not coming by often enough, I will sometimes park at Alewife.

    In the past I've tended to avoid routes that involved bus-to-bus connections, but since getting a smart phone I've been more willing to do this. I've also taken Ubers when public transit has been too inconvenient.

    When I was going to Northeastern, I'd have a standard route between home and work: bus -> Harvard, Red Line -> Park Street, Green Line -> Northeastern.

    Generally speaking, I find public transit to be a chore. Because of how long the trips take (often about an hour), because of crowding during busy hours, and because of wait times during off-hours. If, say to eat out or see a movie with friends, I could go somewhere in the city that would take me 30-60 minutes to get to by public transit or I could go somewhere in the suburbs that's the same distance away but takes 10-20 minutes to get to by car, the choice is obvious.

    1. what bus to bus connections do you make. i'm not that familiar with the mbta's bus system, so i'm interested in the frequencies they run

    2. also i hope you actually honest to god fell asleep reading it

  2. I actually don't remember the last time I made a bus-to-bus connection. The places I go with any regularity don't require them. The other day I was going to Brookline and I was going to take the 70/70A from work to Central, then take the 66, but I did a little research and found that driving+parking would actually be pretty easy and opted to drive instead. I know that Rachel has done bus-to-bus connections to travel between our house and her job in Union Square - for example, 74 or 78 to Harvard, then 86 to Union Square.

  3. This comment has been removed by the author.

  4. Hello Matt,

    I enjoyed reading through your article, and I have found myself really getting interested with public transit as well.

    One thought I may have - you mentioned a fairly simple recursive approach to solve the above problem. I'm assuming, like most things, it operates in terms of expectation. It seems as though that the real advantage of Alternative #1, however, is that if one has a more risk-averse perspective, then the utility of such a configuration is much higher than Alternative #2. Perhaps it would be neat to implement another algorithmic approach to be able to comment on the uncertainty in a given trip.

    You also have a real job, so I expect that such ambitious plans would have to wait. Either way, I found this map to be quite useful - nice job!


    1. yeah man!!! i was thinking about a map that measures risk/deviation just the other day.

      i have access to real time arrival data, but i'm not sure if i'm going to have to aggregate it historically if someone else already is. but that seems like the best way to compute something like that.


    2. Hmm, I did not realize that you had empirical data - even better! Do you have access just to data for the travel time between A and B, or do you also have data on transfer times if I stop at B to go to C? If not for the latter, maybe just assume that it is Poisson (for now)? Transfers are tricky, but I remember reading a paper where they estimated a (rather) large penalty for transfers when estimating the utility of public transit. Let me find it...

    3. I have full timetable data to handle transfers (http://metro.kingcounty.gov/gtfs/). I'm reluctant to add a blanket penalty; I'm more interested in showing people the theoretical transit network they have access to, working with them to figure out why they're not utilizing it (at a deeper level than 'i don't like transfers', and then allowing this as a configuration in map generation.

  5. Nice post. Speaking about technologies these days. I know that secure virtual data room is a good substitute for old-fashioned way of storing the information.

  6. invested my money superior roulette casino games and made the casino choice