Tyler A. Green

In Transit

Tag: transfort

A Ruby Gem for GTFS to GeoJSON Conversion

I published my first Ruby gem: gtfs-geojson! You can view the source on GitHub. gtfs-geojson is a Ruby utility to convert a GTFS feed to a GeoJSON file. It’s a simple endeavor, for sure, but I’m pleased with what I learned along the way.

Let’s start out with some before-and-after views of the data. These images were created using QGIS, OpenStreetMap, Transfort’s GTFS feed, and the gtfs-geojson library.

The Transfort GTFS data loaded in QGIS before applying the Ruby gem for GTFS to GeoJSON conversion.

This map displays the shapes.txt file from Transfort’s GTFS feed loaded into QGIS. The seemingly-inconsistent shading on the lines is because there are no lines at all; each “line” is made up of a sequence of points. Each point contains a route ID and is ordered relative to the other points in its route by a point sequence value.

The Transfort GTFS data loaded in QGIS after applying the Ruby gem for GTFS to GeoJSON conversion.

After running the GTFS feed through gtfs-geojson, you now have a GeoJSON file whose features are each route from the original feed. I used “Categorized” styles in QGIS to quickly apply a unique color to each route.

As with most transit projects, the input to gtfs-geojson is a GTFS feed. GTFS is the standard format published by transit agencies worldwide to make their routes, stops, and even fares usable by developers. The data is a series of comma-separated text files. To validate a GTFS feed, I used an existing gem. gtfs will fail gracefully if the shapes.txt file is not present, which is the only file I actually need for the conversion to GeoJSON.

gtfs-geojson implements the same algorithm as the “Points to path” QGIS tool I used when looking at Transfort bus data. The main trick is that the points within each route ID must be sorted by their point sequence value. Several other QGIS plugins I tried did not do this correctly, so don’t forget this if implementing this yourself!

While QGIS tools output shapefiles, gtfs-geojson produces a GeoJSON file, which is a JSON stream with geospatial points and polylines data served up in a standard format. I have previously loaded GeoJSON files in Mapbox applications, and they are also useful in a GIS context. The following three lines will load the library, validate the GTFS feed, convert its shapes.txt file to GeoJSON format, and write the GeoJSON to a file.

require 'gtfs-geojson'
geojson = GTFS::GeoJSON.generate("gtfs.zip")
File.open("gtfs.geojson",'w') do { |f| f.write(geojson) }

That’s it! Let me know if you have any suggestions! The README on the GitHub repo gives installation instructions.

The most valuable tip I learned while creating this gem was the use of the $RUBYLIB environment variable. This isn’t necessary when installing a gem onto your system using bundler, but it is extremely helpful during development. $RUBYLIB lets you specify the path searched when the require keyword is used. To add paths dynamically to $RUBYLIB, you can push items to the ‘$:‘ array. $: is shorthand for $LOAD_PATH within a Ruby program. My require_relative days are over!

If you are considering writing your own gem, I highly recommend RubyGems.org’s “Make Your Own Gem” guide. It is comprehensive and just generally fantastic.

I plan to use gtfs-geojson in a Rails project in the future. And speaking of gems, I’ve also been dabbling on a Ruby API client for Transitland. I hope to have more to share on both fronts soon!

Until then, ride on!

Have any transit projects to share? Let me know!

All Aboard the Fort Collins Municipal Railway!

After seeing a call for volunteers in the Coloradoan, Calvin and I are now conductors-in-training for the Fort Collins Municipal Railway! We had our first session yesterday and toured the trolley barn on N. Howes Street. I’ve shared a few photos below!

Streetcars originally ran in Fort Collins from 1907 until 1951. Five streetcars served the city over these years. The first run of restored Car 21 was in 1984, and this is the car that still runs today. The FCMR Society is in the process of restoring a “second Car 25.” (Who needs unique fleet numbers??) I’m looking forward to learning more of the history of the trolley and giddy for the opportunity to share the intrigue of a historical mode of transit with the families of Fort Collins this summer!

The trolley runs on weekends and holidays May through September. Visit fortcollinstrolley.org for more information!

The Fort Collins Municipal Railway barn on N. Howes Street. It was built in roughly ten years before the date listed on its sign of 1919. Not sure of the reason for the misdirection!

The Fort Collins Municipal Railway barn on N. Howes Street. It was built in roughly ten years before the date listed on its sign of 1919. Not sure of the reason for the misdirection!

The body of Car 25 in restoration in the trolley barn. The "truck" or undercarriage is pictured in the foreground. Its current restoration as Charleston Car 407 was done by the SCANA Corporation of South Carolina. It was purchased by the Fort Collins Municipal Railway society in 2007.

The body of Car 25 in restoration in the trolley barn. The “truck” or undercarriage is pictured in the foreground. Its current restoration as Charleston Car 407 was done by the SCANA Corporation of South Carolina. It was purchased by the Fort Collins Municipal Railway society in 2007.

A closer view of the truck of Car 25. In the foreground and background center are the two motors that power the wheels. The short wheel base was common among Birney cars such as this one.

A closer view of the truck of Car 25. In the foreground and background center are the two motors that power the wheels. The short wheel base was common among Birney cars such as this one.

A close up of one of the Car 25 wheels. The motorman has a control that will drop sand onto the tracks in front of each tire to assist in braking!

A close up of one of the Car 25 wheels. The motorman has a control that will drop sand onto the tracks in front of each wheel to assist in braking!

Other contents of the trolley barn garage included a recently-retired Transfort bus. There was talk of opening a transportation museum, and this is one of the "relics". Transfort does not operate any Blue Birds today, so this find excited me!

Other contents of the trolley barn garage included a recently-retired Transfort bus. There was talk of opening a transportation museum, and this is one of the “relics”. Transfort does not operate any Blue Birds today (only Gilligs and NABIs, that I know of), so this find excited me!

More trolley barn contents: a historical Timnath fire truck!

More trolley barn contents: a historical Timnath fire truck!

A historical omnibus (horse-drawn bus) in the Fort Collins Municipal Railway trolley barn! There is some doubt as two whether this was actually a school bus, but the side reads "Cache la Poudre School Bus."

A historical omnibus (horse-drawn bus) in the Fort Collins Municipal Railway trolley barn! There is some doubt as two whether this was actually a school bus, but the side reads “Cache la Poudre School Bus.”

A side view of the "Cache la Poudre School Bus" in the Fort Collins Municipal trolley barn.

A side view of the “Cache la Poudre School Bus.”

Two giants in transit: Blue Bird and Transfort.

Two giants in transit: Blue Bird and Transfort.

The Transfort bus was retired even more recently than I would have guessed; this label shows its annual inspection was last completed in June 2014.

The Transfort bus was retired even more recently than I would have guessed; this label shows its annual inspection was last completed in June 2014.

The interior of Car 25 during restoration in the Fort Collins Municipal Railway trolley barn.

The interior of Car 25 during restoration.

The ceiling of Car 25 is marked with its original manufacturer: J.G. Brill Company in Philadelphia. Brill stopped making transit vehicles in 1954.

The ceiling of Car 25 is marked with its original manufacturer: J.G. Brill Company in Philadelphia. Brill stopped making transit vehicles in 1954.

I have loads more to learn about trolleys in Fort Collins! Let me know if you have any questions and I can likely find the answer from the knowledgeable people in the society. Hope to see you on the ride down Mountain Avenue this summer!

Ride on!

I’m a Millennial and I Don’t Expect WiFi on Buses

MTA’s new fleet of buses will have WiFi! Millennials everywhere rejoice! Or so says the narrative playing out in New York this month.

After New York Governor Andrew Cuomo announced that more than 2,000 WiFi-enabled buses will hit the streets of New York City by 2020, I am left wondering: WhyFi?

One quote circulating the transit web this week from MTA Chairman Thomas Prendergast is particularly interesting: “As more and more millennials enter the system and use it daily, these are expectations, not desires, on their part.” Are they though?

I ride two buses for a total of about 35 minutes each weekday morning. I read books. I read articles on my phone. I write emails. I plan my days. Sure, there have been times where I’ve thought about finishing a nagging programming problem on the bus. The truth is: my overall daily effectiveness is actually higher because of my non-WiFi activities. I schedule that time to finish lingering tasks from the day and catch up on blogs I literally only read while I’m on the bus.

Why can’t there be a different headline headline? “Millennials discover new productivity techniques while riding the bus” has a nice ring to it, don’t you think?

On the other hand, access to cell signal is an enormous benefit. I was excited when Chicago added cell signal to its underground routes last year. On a 20-minute ride, the benefits from cell signal versus nothing are far greater than those of WiFi versus cell signal only.

Oh, and the two times I’ve decided to use WiFi on the MAX, I was greeted with the following result.

Bad experiences with WiFi on buses

Even the document error icon looks sad.

Bad experiences with WiFi on buses

Maybe I forgot to connect to the netwo…nope, that’s not it.

Bad experiences with WiFi on buses

If speedtest.net had ever loaded, I doubt I would have been pleased with its figures.

(At this point in writing this, I conducted a not-quite-full-fledged survey on the 16 bus and asked two people about their MAX WiFi experiences. Jake from An Anxious Extrovert relayed he has numerous underwhelming experiences with the MAX WiFi. “Sometimes a Facebook message will come in, but I can’t read it or reply.” Get the picture? Jake did bring up a fantastic use case I had neglected to consider: those with smart phones but without data plans. (Functional) WiFi on the MAX would give him around 40 minutes round-trip connectivity a day he otherwise goes without. Our nameless seatmate gave a convincing “No!” when we asked if he had gotten the WiFi to work. He asked the driver about this once and the driver even went outside the bus to make a tweak, presumably with the intention of improving the internet access. We digressed to make a full series of jokes about the driver crank starting a dedicated WiFi generator, making subtle hand adjustments to a satellite dish, and even sending HTTP requests manually on behalf of the riders before I remembered our original question. I asked our bus-mate if the internet had worked after the tweak and his response was inconclusive: “I think I got off the bus.” And we’re back…)

I understand that WiFi is not a huge expenditure. Transfort allocates $40,000 a year for WiFi service on the MAX (out of an annual budget of if-I’m-reading-it-correctly $57 million) and it will cost $10.2 million for the MTA. Two things to keep in mind for the MTA: 1) this number also includes installation of USB charging ports and, 2) their annual operating budget is $14.8 BILLION.

Even if an agency can reasonably afford to fund WiFi on buses, the planning and implementation of internet connectivity takes away from improvements on its core mission: to increase urban mobility.

Intercity buses are a different story. When you are in a single seat for more than an hour and don’t have people standing in your face, WiFi offers a real benefit. I have heard of good experiences with the WiFi on Bustang and Express Air Coach, the shuttle my friends used to take between the Chicago airports and Purdue. You could argue this extends to express intracity buses, where passengers remain seated for a longer period of time and there are fewer stops and shuffling inside the bus. I’d be curious to see the average ride length on a NYC express bus verses a non-express bus. Either way, this is not the plan. Cuomo is putting WiFi on the bus you take four blocks after getting off the F train.

From a millennial who loves buses: don’t bother with WiFi. Focus on world-class service and the people will follow.

What do you think about WiFi on buses? Are there any sides to the argument I missed? Let me know in the comments below!

For some solid coverage of the the MTA announcement, I recommend the following:

  • Benjamin Kabak calls the network connectivity on underwhelming bus service, “putting libstick on a pig”.
  • CityLab reports on a TransitCenter study about factors that would increase transit ridership by age. Access to WiFi was 12th out of 12 among those age 30 and above and 9th out of 12 for those below 30. Number one among all ages: trips on transit taking less time.

I Spot Transfort MAX Buses

If you wanted to see pictures of all six eight nine Transfort MAX buses, you are in luck! Please join me as we tour the fleet of North American Bus Industries vehicles. And no, I’m not the first person to practice bus spotting.

Aside: please raise your hand if you were also worried upon discovering the first verb in the first sentence on NABI’s Wikipedia page is in past tense. “NABI Bus, LLC (NABI) was a designer and producer of heavy-duty transit buses…” The NABI brand was discontinued in 2014 (the year the MAX opened) and its plants will now produce buses for its parent brand, New Flyer. I hope NABI spare parts were not also discontinued.

MAX 79

MAX 79 from the fleet of Transfort buses

MAX 79 departing the South Transit Center. Bus 79 was my last bus to spot and I was getting anxious. Calmer pictures to follow!

MAX 80

MAX 80 from the fleet of Transfort MAX buses

MAX 80 at the South Transit Center. This AM-sunlit platform would be clutch during my season of bus spotting.

MAX 81

MAX 81 from the fleet of Transfort MAX buses

A northbound MAX 81 crossing Olive on Mason. Again, not a bus portrait studio, but necessary for completion. This intersection would serve me well in the future…

MAX 82

MAX 82 from the fleet of Transfort MAX buses

MAX 82, also northbound at Olive and Mason. I couldn’t have produced this motion panning effect even if I tried! And I definitely didn’t. (See MAX 81.) Let’s say I was hoping to produce a neat “we’re going places” effect for a Transfort promotional.

MAX 83

MAX 83 from the fleet of Transfort MAX buses

MAX 83 back at the sun-soaked South Transit Center. This is the only known photo of my shadow with a MAX bus. Except for the other three in this set I cropped it out of.

MAX 84

MAX 84 from the fleet of Transfort buses

MAX 84 at the…you guessed it…South Transit Center with a…you guessed it…tumbleweed. #colorado

MAX 102

MAX 102 from the fleet of Transfort MAX buses

MAX 102 at the South Transit Center on a day where the snow tainted its usually-pristine livery. MAX 103 peeps in from the rear. Buses 102 and 103 were ordered after the other six, which explains the gap in the fleet numbers.

MAX 103

MAX 103 from the fleet of Transfort MAX buses

MAX 103 at the South Transit Center on the same sloppy morning. Doesn’t that sky just look cold? Bus 103 is currently the highest-numbered in the Transfort fleet.

And, a bonus…

MAX 89: “MiniMAX”

MAX 89, also known as Mini MAX, from the fleet of Transfort MAX buses

MAX 89 at the South Transit Center. Notice the lack of articulation? Because this is MiniMAX! The articulated buses are not run in the snow and this 40′ replacement is the only (that I know of) non-articulated bus with the MAX livery. It was an unexpected treat to watch the snow fall through a backwards “max” during this ride!

If you’re wondering what kind of idyllic bus world the cover image to this post is from, the answer is Adobe Lightroom. Doesn’t this better-than-real image make you want to go ride a bus?

I’ll see you there.

Ride on!

MAX 80 from the fleet of Transfort MAX buses

A Snowy Monday on Transfort

Neither snow nor rain nor heat nor gloom of night stays these couriers from the swift completion of their appointed rounds.

The unofficial creed of the United States Postal Service flashed into my mind on my bus ride home today. The clouds rolled in and dropped more than a half-dozen inches of snow on us Fort Colanders (Fort Collinizens? Fort Colonials?) over the course of the day Monday in Northern Colorado. Yet through it all, Transfort service stayed constant. Mostly.

As I first noticed during a large dump of snow a few weeks back, the articulated MAX buses are not run in the snow. The trend continued today! Besides an opportunity to ride #MiniMAX (full post on Transfort bus spotting coming soon), riding the 36 foot and 40 foot members of the fleet are a fun and cozy change. We only slipped a few times during my morning commute and I didn’t have to leave the parking lot with my windshield wipers standing erect like many of my coworkers. Bus in the snow = win! I warmed up with some Coloradoan/Russian coffee from Dazbog and arrived to work giddy from the winter weather. The ride home was more….interesting.

A Transfort bus stop in the snow.

My ride home started out as bleak as midwinter.

After waiting about 10 minutes past due for the Route 16 bus, I checked the Transfort app to see where it was. Yes, this arguably should have been my first step, but the buses are generally on time and this isn’t required. I saw no westbound bus on the map, but there was an eastbound 16 that would eventually wrap around to me. However, I was getting cold, so I made the snow-taneous decision to run across a six lane road and through a very-snowy-and-never-sidewalked area of grass to catch the bus at the next stop. My plan was successful!

A Transfort bus stop in the snow.

Can you see why the Fort Collins Public Transit Action Group is trying to get more consistent snow removal at bus stops?

Aside: I would have appreciated for Transfort’s Twitter account to be used to announce any service changes or lack of due to the snow. I can understand if you don’t have alerts as detailed as the NYCT Subway, but I would have liked at least a cursory notice that the buses are operating today. The announcements they do make via Twitter are very helpful, but I think running a more interactive account could be beneficial to everyone. Regardless, I have been impressed with the real-time data through their app!

After completing the full loop out to the Harmony Transit Center and back, we made our way to the South Transit Center (STC). There was a snow clearer wearing a “TRANSFORT SUPERVISOR” jacket, so I took the opportunity to ask him about the articulated MAXs’ absence when flurries start to fall. He explained that the Mason Corridor surface has a crown and the back section of the buses can slip when the roads are icy. He sent me off to board the short MAX with something along the lines of, “Don’t want to take any chances with your safety!” What a guy!

I’m happy to have an explanation for the fleet switch purely out of curiosity’s sake. However, I still find it odd that there was a $200,000 annual line item labeled “MAX/BRT Snow Removal” in the 2015-2016 Fort Collins City Budget, but that isn’t enough to always run the buses you bought for that guideway. Any rate, I commend Transfort for their overall service in the snow, as they did indeed get me to work and home safely!

On the northbound MAX ride, I enjoyed chatting with a University of Arkansas alum! We sped through about eleven topics on the ride, including Tour de Fat, the Clinton Presidential Library, and that Memphis exists.

A Transfort bus in the snow.

Neither snow nor rain nor heat nor gloom of night could slow this Transfort bus.

Old Town Fort Collins in the snow

Old Town Fort Collins is magical!

We only ran into one curb and the driver managed to drop everyone at the proper stops even though the cord wasn’t working! I always love riding the bus, but days like today where about ten interesting things happen get me even more excited. I couldn’t stop smiling my whole walk home from the snowy bus adventure! I’ll leave this post with what my friend Colby, of #RTDDay fame, once said, “I get the bus thing. You’re taking something that’s normal and you’re turning it into something that’s magical.”

Other News

I recently discovered this awesome visualization on bus bunching! It’s mesmerizing to watch the “vicious cycle” of a bus being delayed for some reason, then being even more delayed after having to board a larger number of waiting passengers at the next stop.

I’m working on a project similar to this transit frequency visualization from Transitland. I’ve just about completed the Ruby side and learned lot about Ruby Gems and GeoJSON in the process! All that’s left is getting the hang of Mapbox to make a flashy result. I have already looked at the results in QGIS and that would make a suitable platform, but I’m excited to get more comfortable with Javascript while using the mapping service I  noticed is now used by The Weather Channel. No, my project will not address the looming L train crisis, but I hope it will still be insightful!

Until next time, ride on!

Transfort Bus Stops Through the Lens of GIS

To better understand the Fort Collins population and what percentage of it is adequately served by Transfort bus stops, I decided to jump on board the GIS-hype train. I downloaded QGIS, read a bit at qgistutorials.com, and felt ready to dive in.

You’re talkin’ about Transfort bus stops?

You bet I am! To begin (and prove to myself this wouldn’t be the most manual project I’d ever taken on), I collected data from several sources. I have included a Links section with paths to download the data yourself. You can also jump straight to the data, though you’ll miss some sweet graphics along the way.

  1. Transfort – I could not find shapefiles for either the Transfort stops or routes, so I began with the GTFS feed. Data in this transit agency standard format is in a series of comma-separated text files. The three of interest to me were the stops.txt, shapes.txt, and routes.txt.
  2. City of Fort Collins – I used two shapefiles provided by the city, ones of city limits and street centerlines.
  3. Colorado Information Marketplace – Fortuitously, Colorado publishes population data on the census block level. These correspond to city blocks, which were necessary for analyzing the population within Fort Collins.

To visualize the population density, I began with a heatmap. The census blocks shapefile is essentially a table of polygons, each with an attribute containing the population of that block in 2010. I filtered the layer to only include blocks within Larimer County and then created a layer of the census block centroids, which turned each polygon into a point. At this point, the default layer unit was degrees. To analyze this layer in meters, I reprojected the layer to SIRGAS 2000 / UTM Zone 13N. I then created a raster heatmap with a radius of 402 meters, which corresponds to a quarter-mile radius. This is an area of approximately 0.2 square miles, which is also listed in the map legend.

Before analyzing bus stops, I wanted to visually present each Transfort route. This required converting the shapes.txt file into a routes shapefile. QGIS can do this with the “Points to path” tool under Vector Creation algorithms. I have uploaded the resulting shapefile, along with PDFs of the following maps, in the Downloads section.

Population Density with Transfort Bus Stops

In addition to population density, I wanted to study walking distance from Transfort bus stops. Latitude and longitude information for each stop is contained within the stops.txt file. The QGIS plugin MMQGIS allows imports of these using “Geometry Import from CSV File.” I again needed to reproject the resulting layer to SIRGAS 2000 / UTM Zone 13N to ensure the layer units were meters. I wanted see the results of a 10-minute walk radii, so I created 804 meter (half-mile) buffers around each bus stop.

Ten-Minute Walk Radii from Tranfort Bus Stops

Since the half-mile coverage seemed surprisingly complete, I created a layer of 402 meter (quarter-mile) buffers around each bus stop to show the area within a 5-minute walk.

Five-Minute Walk Radii from Transfort Bus Stops

To allow the population density layer to blend with the walk distance buffers, I changed the layer blending mode to Darken.  The shades of green in the image below show dense areas overlapping with a 5-minute walk radius from a bus stop.

Population Density with Five-Minute Walk Radii from Transfort Bus Stops

Do you have any numbers I can ‘wow’ my friends with?

Fort Collins Population within Walking Distance of Transfort Bus Stops

I’m glad you asked! Another powerful feature of GIS is quantitative analysis. I used “Basic statistics” on the 2010 population field of the census block centroids layer to calculate the population of Larimer county. For the population of Fort Collins, I selected the census blocks that lie within the city limits polygon using a Spatial Query. Running statistics on these selected census block centroids produced the city population number in the table above.

You can see that the first half-mile buffer population is larger than the city population. I calculated the population within the walking distance buffers using two methods to adjust for this:

  1. No Flex Route – The FLEX is a commuter route operated by Transfort whose northern terminus is the South Transit Center. Several of its northern-most stops are inside Fort Collins city limits. I made the decision to remove the population near FLEX stops as commuter bus service has lower frequencies, and therefore different usage patterns, than a typical city bus. This was accomplished by joining the stops shapefile with stop_times.txt and trips.txt to give each route a column with its route name. I then used the Query Builder to select all stops whose route name was not “FLEX”.
  2. City Limits – The northwest corner of the Transfort routes actually runs outside of Fort Collins city limits, meaning the people living close to these stops were not included in my calculated city population. I performed a Spatial Query to select the bus stops within the city limits polygon boundary. These are the only stops I calculated buffers around when selecting census blocks for this method.

In the figure below, the bottom center red circle shows the location of the first adjustment and top left red circle the second.

Exceptions Made When Analyzing Data for Transfort Bus Stops

What does this mean?

You can see that the east side of Fort Collins contains both fewer dense areas and fewer routes, especially north-south routes. I have seen a pre-MAX Transfort map (pre-May 2014) that contained a north-south route on Timberline Road, the easternmost arterial in Fort Collins. While it is disappointing that ridership supposedly did not justify keeping this route, the density numbers back up this service change.

The half-mile buffers confirm that the city is broken into a square mile grid. The two east-west routes (Horsetooth and Harmony) in the southeast corner of the map show the half-mile circles bumping against each other, creating a distance of a mile between the two roads.

Depending on the metric, between 60% and 63% of Fort Collins residents are within a five-minute walk of a Transfort bus stop. This is significantly higher than I would have guessed. However, being near a bus stop is only part of the story; frequency of service and driving disincentives also play a major role in whether a resident will ride the bus or not. Parking is quite easy in most of Fort Collins and the areas where it is harder, mainly Old Town, provide markedly sub-market value parking. The headway on the routes, excluding the MAX, is either 30 or 60 minutes. And there is no Sunday service. All this goes to say living within 5 minutes of a bus stop does not necessarily make for a transit heaven. It should also be noted that the block-level populations may have significantly changed since the 2010 census.

Regardless, having 87% of your population live within a 10-minute walk of a bus stop indicates an overall lack of transit deserts and a fairly comprehensive bus system. I think Fort Collins is very close to a big shift in transit culture!

For better or worse, I will now scrutinize the density surrounding my Transfort bus stops and routes even more. Here’s what I can tell you from my observations thus far: it’s not great. Here’s what the data says: it’s not great. And here’s to using data to continue to improve our city and its bus service!

Let me know if there is more I can do with this data! I’d also enjoy seeing analysis of this type in your own city.

Until next time, ride on!

Downloads

Transfort Routes Shapefile

Population Density with Transfort Bus Routes PDF

Ten-Minute Walk Radii from Tranfort Bus Routes PDF

Five-Minute Walk Radii from Transfort Bus Routes PDF

Population Density with Five-Minute Walk Radii from Transfort Bus Routes PDF

Links

Transfort GTFS Feed
http://www.ridetransfort.com/developers OR
https://code.google.com/p/googletransitdatafeed/wiki/PublicFeeds OR
http://transitfeeds.com/

City of Fort Collins
http://www.fcgov.com/gis/downloadable-data.php

Colorado Information Marketplace
https://data.colorado.gov/Demographics/Census-Blocks-2010/xipb-k5bu