The Rapid, the bus service for Grand Rapids and surrounding areas, recently redesigned their website. The redesign was long overdue and the result certainly looks a lot cleaner, if still far from inspiring. They’ve added a flash-based map showing their routes (though it could do with being a little larger on the page) and added PDF maps of each route (eg. this one for Route 6)). Unfortunately as yet there’s no tool for working out routes, but that’s not a big surprise.
My favourite features, however, are not any of those mentioned above but the fact that each route now has a clean URL (eg. http://www.ridetherapid.org/ride/routes/6/) and a link to google maps for each stop, thereby exposing the coordinates of all the stops. With those two components in place, it becomes very easy to pull out the route data and begin to apply it to other uses. A ruby script (using _why’s excellent hpricot) to do just that would be:
#!/usr/bin/env ruby
require 'rubygems'
require 'open-uri'
require 'hpricot'
routes = (1..15).to_a.concat [24,28,37,44,49,50,51]
routes.each do |route|
begin
route_uri = "http://www.ridetherapid.org/ride/routes/#{route}/stops/"
doc = Hpricot(open(route_uri))
title = doc.at("h1").children[0].to_s.strip
puts title
stopList = doc.search("div#stopList table tr")
(1..stopList.size).each do |row|
unless stopList[row].nil?
uri = stopList[row].at("a").attributes['href']
name = stopList[row].at("a").children[0].to_s
coords = uri.match(/q=(d+.d+),+(.*?)&/)
if coords.class == MatchData
latitude = coords[1]
longitude = coords[2]
puts "#{name} on route #{route} is at #{latitude}, #{longitude}"
end
end
end
rescue => err
puts "Problem retrieving #{route_uri}"
end
end
With this data available, it immediately becomes possible for local people and organizations to make use of it in a variety of ways–businesses could easily show the nearest bus stops to their locations, listing services can help visitors plan their routes, and those of us who aren’t fans of the flash-map could use other services to build alternatives.