ALERT! : More info
Translink Buzzer Blog

iBusVan: an iPhone transit app

Update, Jan 6, 2011: Sadly, iBusVan has now been discontinued! However if you want to take over the project instead, please check out this post.

Update Jan 26, 2011: The app is now open source—find out more about grabbing the code here!

The iBusVan logo.

The iBusVan logo.

Have you seen iBusVan, an iPhone app for Vancouver transit? It’s now using TransLink’s GTFS data feed to power its schedules!

The app is available for $0.99 and it’s the work of Zhenwang Yao, an independent app developer from SFU.

I e-mailed Zhen and did an interview so we could all learn about him and his transit tool — check it out below.

(Also, if you don’t know, TransLink offers its own official iPhone app for free in the App Store. But we do welcome development of tools like iBusVan to provide more info options and features for customers!)

Could you talk a bit about the history of iBusVan? I see you have two existing apps already, UniBus and iBusPortland. How does it compare?

Zhenwang Yao, the developer of iBusVan, in Copenhagen!

Zhenwang Yao, the developer of iBusVan, in Copenhagen!

I started iPhone app development in August 2008. Looking for some interesting projects to start with, I came across the emerging open Google Transit Feed Specification (GTFS), which is dedicated to standardizing public transit information, and making it publicly accessible. I think this is a great step. I am a regular public transit rider, so I know how bad it feels when you are standing at a bus stop wondering when the bus will arrive.

So I started with Portland, OR, as Trimet (TransLink counterpart in Portland) is the pioneer to make their transit data public. More importantly, they have provided web-based API for transit application developers, which made development of the app much easier. Right after release of iBus-Portland, I started working on extending the app for more cities. That’s UniBus, iBus-Universal.

For UniBus, I created my own transit information server, hosting transit data server for multiple cities (currently 36 cities, 48 agencies), and unified the iPhone app to allow users dynamically switch between cities. For example, one user I know use UniBus regularly in Vancouver, and when he traveled to Toronto, he simply switched the app to Toronto and got the local TTC bus/subway schedule.

While keeping UniBus, recently I decided to make simplified iBus apps for specific cities, and iBusVan for Vancouver is the first in the line. iBusVan (and other iBus apps to follow) shares the same core as UniBus, but has a simpler user interface. For example, switching and updating for different cities have caused confusions for some UniBus users, so iBusVan is only for Translink in Vancouver, and has a more concise data update interface. Another reason to make more iBus apps
is because a recent change in Apple’s App Store has limited the keyword of an app to 100 characters, which has far from enough for UniBus to include city names as keywords and hence has excluded UniBus from search result by most cities.

Can you talk a bit about the features in the app?

As a transit app, iBusVan (and UniBus) includes basic functions like: display upcoming bus arrivals, stop search, route search, maps, etc. In addition, there are some unique features:

– Whole day schedule. Besides a couple of upcoming arrival times, users can also look into the whole-day schedule of a route for any day of the week and for any stop on the way.

– Location-aware search. Not only can users search stops near their current location, but they can also ask for stops for a certain bus. For example, if you are going to take 97 or C24, you can easily find stops nearby for these two buses.

– Supports both on-line and off-line viewing. Users can set the app to automatic switch between online and offline modes based on network condition. When an offline user goes back online, it will notify the user if there is a schedule update available.

Did these apps take a lot of time to put together? How long have you been working on them?

These apps have taken most of my spare time.

The first app (iBus-Portland) was relatively simple, since it used Trimet’s web server, and took me about two weeks. UniBus took me about one month to make the initial version (including the transit information server and the iPhone app), then two updates of UniBus in another two months. After that I barely had time to work on the apps, except some regular supports and data maintenance. Recently, I resumed the development on the apps again, and spent about one month in the latest UniBus update, and the release of iBusVan.

In total, it has been more than a year on and off.

Can you tell us a bit about yourself? Where are you from? What’s your programming background?

I am originally from China, and currently an SFU Engineering graduate student about to graduate. I study robotics, and worked with the Robotic Algorithms and Motion Planning Lab. I have strong interest in developing mobile applications particularly for navigation. Some part of my research is to study how to navigate rescue robots (or human fire-fighters) with mobile devices in the case of emergency.

Besides robotics, my experiences are mostly in programming and software development. In my current research I develop my own software/simulations for robots and distributed network systems. In my previous work experience, I developed software in many different fields, including mobile devices and related applications (with Motorola), human computer interface, and GPS devices.

Are you a regular transit rider?

I take buses every day! That was my motivation to make the iBus series, and to add iBusVan to the series.

What’s your favourite seat when you ride transit?

Last row beside the windows.

What’s next for iBusVan?

I really would like to see how people like the app, get more feedback from users, and to improve the app in the next version.

A known issue is iBusVan cannot differentiate between buses of same route but to different destinations, for example 130 Hastings/Kootenay Loop/ Phibbs Exchange/Capilano University. This is due to the quality of dumped data, and I am hoping the official release of Translink data will solve this problem.

Another function I am thinking is a trip planner, particularly for offline users. This can be challenging due to limited resources on the iPhone/iPodTouch.

How can people reach you if they have feedback?



  • By Matt L, January 6, 2010 @ 10:31 am

    I completely agree with hoping the data provided by Translink is cleaned up somewhat. The issues with scheduling data can even be seen in some official Translink websites and the Translink iPhone app.

    The 130 is a good example, but one that illustrates the problem with Translink’s data formatting even better is the 19. Go to, search for 19, then when it asks what direction you want schedule data for the two options are:

    West / Kingsway to Joyce
    East / Metrotown Stn

    This is obviously wrong. Pick East and it shows the first stop as Kingsway @ Joyce St. Again, wrong.

    The data dump simply tacks garage bound routings on to the start or end of the actual route, rather than using the alternative endpoint/route feature of the GTFS format. This is very confusing for casual transit riders who don’t actually know the routes and makes schedules such as this in the website useless.

    Following this example, if you scroll through the stops you suddenly jump from Central Blvd @ Willingdon to Stanley Park Loop @ Bay 2. That’s a large leap.

    Translink is also not setting the destination field in the GTFS dump correctly either.

    The 97/C24 example from the interview is another good one, it would be nice if Translink used the bus stop hierarchy ability of GTFS as well. So bus loops could be given a stop id for the entire loop, encompassing all stops within. This would allow people to look up one stop number for the loop if there’s multiple buses from the same loop but at different bays going where they need to go.

    In this example, Say you’re heading to North Road & Como Lake, you could take the 97 or C24. However without this higher level stop numbers that’s two different searches to find departure times.

    The GTFS data definitely needs some cleanup.

  • By Matt L, January 6, 2010 @ 10:37 am

    Oh, and to clarify, all these examples and solutions such as loop level bus stop ids, are features natively supported within the GTFS standard. They’re simply not implemented or not implemented correctly right now by Translink.

    Actually if you read the GTFS documentation some of these are encouraged, and some for the GTFS formatting Translink does is technically correct but it falls outside the intent of the feed specification.

    There is a fantastic Google Group (transit-developers) for those those interested in transit app development with experts in routing, data feed parsing and other issues from transit systems around the world.

    There’s also the Vancouver-Data Google Group for those interested in Metro Vancouver oriented open data development projects.

  • By Jhenifer Pabillano, January 6, 2010 @ 11:06 am

    Thanks! I’ll pass this along to our web team.

  • By ..., January 7, 2010 @ 6:22 pm

    I just checked on and it said West-Kingsway to Joyce and
    East-Metrotown Station. Not only that is confusing, it is hard for me to tell if it goes to Stanley Park or it just goes to Metrotown station from Joyce.

  • By Jason V, January 8, 2010 @ 10:02 pm

    Thanks Zhen! More mobile power!!

  • By Paul, January 9, 2010 @ 11:39 am

    There are a lot of glitches on a lot of the routes in terms of where the bus starts and stops it route.

    #20 WB starts at 54 Ave not at Marine Drive. But if you scroll through the list it eventually shows the Marine stop.

    #8 starts at 41st apparently according to the schedule.

    Or the 41 or 43 at times supposedly have no buses stopping at Ash/Cambie? Basically there is no schedule time stop. Sometimes I’ve seen the Cambie stop listed after School Ave which makes it look like it is before Kingsway which of course it is not.

    The biggest thing I’d love to see although it may not be possible. Right now if I text the next bus service. It gives a list of the 5 next buses scheduled to come. But it does not tell you exactly when the next bus is going to come or has it gone through already and I’ve missed it. Because a couple of times I’ve seen the bus go by at least 2 minutes before it was scheduled to. At the timing stops this doesn’t happen of course because the bus has to sit and wait.

  • By ;-), January 9, 2010 @ 12:29 pm

    I agree with Paul. I thought I was the only one to notice this problem on the m translink site.

    I got to a point where I just bookmark my favourite stops to get around the sort order.

    Here’s a question, how does a stop earn it’s five digit number. Is there meaning behind each number like a postal code?

  • By Jhenifer Pabillano, January 14, 2010 @ 1:15 pm

    Surprisingly enough I managed to get an answer for you! We apparently have a Bus Stop Management system over at CMBC. Here’s their response.

    The bus stop re-numbering project started around 2006. The purpose of the bus stop re-numbering project was to have one unique bus stop number that can be used for all of our database/application systems. It was decided that the Bus Stop Management System (BSMS) would be the main system as this was where new bus stops were generated.

    The first bus stop that was re-numbered starts at #50001 and the general direction that the re-numbering took place was starting from West to East (Vancouver to Langley/Tri Cities). Once all bus stops were re-numbered, any new bus stops (added anywhere in the Metro Vancouver area) was simply added subsequent to the last stop number. For example, if the last bus stop number that is stored in BSMS is #61890, then any new bus stops added anywhere in the Metro Vancouver area will be assigned with the number of #61891. The next newly added bus stop number will be #61892, and so forth. Please note that once the bus stop number is added to BSMS, the bus stop will always have that BSMS number regardless of its status (Proposed, Active, Cancelled) — the bus stop number will not be recycled.

    So, there is no meaning behind the bus stop number — it is simply an unique number stored in our database that can link to other information such as bus routes, schedules, etc.

  • By Jhenifer Pabillano, January 14, 2010 @ 3:17 pm

    Paul: are you seeing these errors on iBusVan or

    To answer the end part of your question though, the Next Bus times that appear are the scheduled times — real-time bus info will not be coming for the next little while. (A project has been scoped out to work on it, but it isn’t actually underway.)

Other Links to this Post

  1. Twitter Trackbacks for The Buzzer blog » iBusVan: an iPhone transit app [] on — January 6, 2010 @ 9:10 am

  2. Twitter Trackbacks for The Buzzer blog » iBusVan: an iPhone transit app [] on — January 6, 2010 @ 5:18 pm

  3. The Buzzer blog » iBusVan iPhone app now discontinued (unless you can take over the project!) — January 7, 2011 @ 10:41 am

  4. The Buzzer blog » iPhone app roundup for Vancouver transit — January 26, 2011 @ 10:46 am

RSS feed for comments on this post. TrackBack URI

Leave a comment

Please read our Participation Guidelines before you comment.