jeepney-and-bus-routes.html 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <!DOCTYPE html>
  2. <html prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article# " vocab="http://ogp.me/ns" lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width">
  6. <title>Jeepney and Bus Routes | Pleasant Programmer</title>
  7. <link href="../assets/css/rst.css" rel="stylesheet" type="text/css">
  8. <link href="../assets/css/code.css" rel="stylesheet" type="text/css">
  9. <link href="../assets/css/theme.css" rel="stylesheet" type="text/css">
  10. <link href="../assets/css/custom.css" rel="stylesheet" type="text/css">
  11. <link rel="alternate" type="application/rss+xml" title="RSS" href="../rss.xml">
  12. <link rel="canonical" href="http://pleasantprogrammer.com/posts/jeepney-and-bus-routes.html">
  13. <script type="text/javascript" src="//use.typekit.net/iwm5axp.js"></script><script type="text/javascript">try{Typekit.load();}catch(e){}</script><!--[if lt IE 9]><script src="../assets/js/html5.js"></script><![endif]--><meta name="author" content="Thomas Dy">
  14. <link rel="prev" href="philippine-transit-app-challenge.html" title="Philippine Transit App Challenge" type="text/html">
  15. <link rel="next" href="one-bus-or-maybe-jeep-away.html" title="One Bus (or maybe Jeep) Away" type="text/html">
  16. <meta property="og:site_name" content="Pleasant Programmer">
  17. <meta property="og:title" content="Jeepney and Bus Routes">
  18. <meta property="og:url" content="http://pleasantprogrammer.com/posts/jeepney-and-bus-routes.html">
  19. <meta property="og:description" content="In the last post, I talked about how we now have data about jeepney and bus routes in the Philippines. The data is actually in the GTFS format, which is the format the Google Maps consumes transit dat">
  20. <meta property="og:type" content="article">
  21. <meta property="article:published_time" content="2013-07-07T10:32:36+08:00">
  22. <meta property="article:tag" content="philippine-transit-app">
  23. <meta property="article:tag" content="programming">
  24. </head>
  25. <body>
  26. <a href="#content" class="sr-only sr-only-focusable">Skip to main content</a>
  27. <header id="header" role="banner"><div class="thomas">
  28. <img src="../assets/img/thomas.gif" alt="DJ THOMAS IN DA HAUS"><img src="../assets/img/thomas.png" alt="Pleasant Programmer">
  29. </div>
  30. <h1 id="brand"><a href="http://pleasantprogrammer.com/" title="Pleasant Programmer" rel="home">
  31. <span id="blog-title">Pleasant Programmer</span>
  32. </a></h1>
  33. <nav id="menu" role="navigation"><ul>
  34. <li class="twitter"><a href="http://twitter.com/pleasantprog">@pleasantprog</a></li>
  35. <li><a href="../archive.html">Archives</a></li>
  36. <li><a href="../categories/index.html">Tags</a></li>
  37. <li><a href="../rss.xml">RSS</a></li>
  38. </ul></nav></header><div id="container">
  39. <main id="content" role="main"><article class="post-text h-entry hentry postpage" itemscope="itemscope" itemtype="http://schema.org/Article"><header><h1 class="p-name entry-title" itemprop="headline name"><a href="#" class="u-url">Jeepney and Bus Routes</a></h1>
  40. <small>
  41. <span class="dateline">Posted: <a href="#" rel="bookmark"><time class="published dt-published" datetime="2013-07-07T10:32:36+08:00" itemprop="datePublished" title="2013-07-07 10:32">2013-07-07 10:32</time></a></span>
  42. |
  43. More posts about
  44. <a class="tag p-category" href="../categories/philippine-transit-app.html" rel="tag">philippine-transit-app</a>
  45. <a class="tag p-category" href="../categories/programming.html" rel="tag">programming</a>
  46. </small>
  47. </header><div class="e-content entry-content" itemprop="articleBody text">
  48. <div>
  49. <p>In the <a href="philippine-transit-app-challenge.html">last post</a>, I talked about how we now have data about jeepney and bus routes in the Philippines. The data is actually in the <a href="https://developers.google.com/transit/gtfs/">GTFS format</a>, which is the format the Google Maps consumes transit data. Apparently, the government will be submitting the GTFS data later this year. Transit directions for Metro Manila in Google Maps would be wonderful. That said, it definitely raises the bar for the app challenge people.</p>
  50. <p>In the last post, I mentioned the quality of the data isn't quite good. Even before seeing the data, I was already a bit unsure of it. The key problem is how you model the routes. The GTFS format was inherently designed for more well developed and organized transit agencies which isn't exactly what we have in the Philippines now.</p>
  51. <p>One potential problem is the nature of the jeeps and buses. GTFS routes are a collection of trips which are a sequence of stops. However, we don't have jeepney stops, and even if we did they still just stop anywhere. There are also times where jeeps will take a shortcut if no passengers need to get dropped off along their normal route.</p>
  52. <p>From what I've seen of the data, they handled the first problem well enough. Stops are defined as where people typically get on the jeep or bus. This is good, but they didn't define a shape for the routes. There is no information as to which exact roads they pass through. All we have to go by are the stops to show the route on a map.</p>
  53. <p><img alt="sample route" src="http://i.imgur.com/NSVlryE.jpg"></p>
  54. <p>The problem isn't that bad though. The agencies could still add the shapes later on. Or maybe an app challenge participant could make an app around fixing the routes via crowd-sourcing or similar. The shape itself isn't that important for a rudimentary directions app, but if we want better apps, we will need better data.</p>
  55. <p>There were also some minor issues with the data itself. Some of the files had extra columns. This normally isn't an issue, but it caused problems for <a href="https://github.com/harrisony/gtfs_SQL_importer">GTFS SQL importer</a>. There were also problems with matching the shape data with the stops when I tried it with <a href="http://onebusaway.org">OneBusAway</a>. They could probably be <a href="https://github.com/OneBusAway/onebusaway-application-modules/wiki/Stop-to-Shape-Matching">fixed</a> but that's for another day.</p>
  56. </div>
  57. </div>
  58. <aside class="postpromonav"><nav><ul class="pager clearfix">
  59. <li class="previous">
  60. <a href="philippine-transit-app-challenge.html" rel="prev" title="Philippine Transit App Challenge">← Previous post</a>
  61. </li>
  62. <li class="next">
  63. <a href="one-bus-or-maybe-jeep-away.html" rel="next" title="One Bus (or maybe Jeep) Away">Next post →</a>
  64. </li>
  65. </ul></nav></aside><section class="comments"><div id="disqus_thread"></div>
  66. <script>
  67. var disqus_shortname ="pleasantprog",
  68. disqus_url="http://pleasantprogrammer.com/posts/jeepney-and-bus-routes.html",
  69. disqus_title="Jeepney and Bus Routes",
  70. disqus_identifier="cache/posts/jeepney-and-bus-routes.html",
  71. disqus_config = function () {
  72. this.language = "en";
  73. };
  74. (function() {
  75. var dsq = document.createElement('script'); dsq.async = true;
  76. dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
  77. (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  78. })();
  79. </script><noscript>Please enable JavaScript to view the <a href="//disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a>
  80. </noscript>
  81. <a href="//disqus.com" class="dsq-brlink" rel="nofollow">Comments powered by <span class="logo-disqus">Disqus</span></a>
  82. </section></article><script>var disqus_shortname="pleasantprog";(function(){var a=document.createElement("script");a.async=true;a.src="//"+disqus_shortname+".disqus.com/count.js";(document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(a)}());</script></main><footer id="footer" role="contentinfo"><p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US"><img alt="CC-BY-SA" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png"></a> © 2015 Thomas Dy - Powered by <a href="http://getnikola.com">Nikola</a></p>
  83. </footer>
  84. </div>
  85. <script src="../assets/js/konami.js"></script><script src="http://code.jquery.com/jquery-2.0.3.min.js"></script><script>
  86. var easter_egg = new Konami();
  87. easter_egg.code = function() {
  88. $(".thomas").toggleClass("whoa");
  89. $("body").scrollTop(0);
  90. }
  91. easter_egg.load();
  92. // love you, thomas!
  93. // yours, @_phi + @meggykawsek
  94. </script>
  95. </body>
  96. </html>