Display which routes are modified when a stop is moved or deleted
Display which routes are modified when a stop is moved or deleted

--- /dev/null
+++ b/betweenpoint.add.php
@@ -1,1 +1,50 @@
+<?php
+  /*
+   * GeoPo Encode in PHP
+   * @author : Shintaro Inagaki
+   * @param $location (Array)
+   * @return $geopo (String)
+   */
+  function geopoEncode($lat, $lng)
+  {
+      // 64characters (number + big and small letter + hyphen + underscore)
+      $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
+      
+      $geopo = "";
+      $scale = 7;
+      
+      // Change a degree measure to a decimal number
+      $lat = ($lat + 90) / 180 * pow(8, 10);
+      $lng = ($lng + 180) / 360 * pow(8, 10);
+      // Compute a GeoPo code from head and concatenate
+      for ($i = 0; $i < $scale; $i++) {
+          $geopo .= substr($chars, floor($lat / pow(8, 9 - $i) % 8) + floor($lng / pow(8, 9 - $i) % 8) * 8, 1);
+      }
+      return $geopo;
+  }
 
+  
+  $conn = pg_connect("dbname=bus user=postgres password=snmc");
+  if (!$conn) {
+      echo "An error occured.\n";
+      exit;
+  }
+  if ($_REQUEST['newlatlng']) {
+      $latlng = explode(";", $_REQUEST['newlatlng']);
+      $lat = (float)$latlng[0];
+      $lng = (float)$latlng[1];
+      
+      $geoPo = geopoEncode($lat, $lng);
+      $nodelat = (int)($lat * 10000000);
+      $nodelon = (int)($lng * 10000000);
+      echo($nodelat . "," . $nodelon . "=$geoPo<br>");
+      $sql = "INSERT INTO stops (geohash,lat,lng) VALUES ('$geoPo', '$nodelat', '$nodelon')";
+      $result = pg_query($conn, $sql);
+      if (!$result) {
+          echo("Error in SQL query: " . pg_last_error() . "<br>\n");
+      } else {
+      echo "Inserted new point at $geoPo <br>";
+	}
+  }
+  flush();
+?>

--- /dev/null
+++ b/betweenpoint.delete.php
@@ -1,1 +1,33 @@
-
+<?php
+  
+  $conn = pg_connect("dbname=bus user=postgres password=snmc");
+  if (!$conn) {
+      echo "An error occured.\n";
+      exit;
+  }
+  if ($_REQUEST['oldgeopo']) {
+    
+      $sql = " DELETE from stops WHERE geohash = '{$_REQUEST['oldgeopo']}'";
+      $result = pg_query($conn, $sql);
+      if (!$result) {
+          echo("Error in SQL query: " . pg_last_error() . "<br>\n");
+      } else {
+      echo "Deleted {$_REQUEST['oldgeopo']}<br>";
+      $updatedroutes = 0;
+      $result_outdatedroutes = pg_query($conn, "Select * FROM between_stops where points LIKE '%" . $_REQUEST['oldgeopo'] . ";%'");
+      while ($outdatedroute = pg_fetch_assoc($result_outdatedroutes)) {
+          $newpoints = str_replace($_REQUEST['oldgeopo'].';', '', $outdatedroute['points']);
+          $sql = "UPDATE between_stops set points='$newpoints' where fromlocation = '{$outdatedroute['fromlocation']}' AND tolocation = '{$outdatedroute['tolocation']}' ";
+          $result = pg_query($conn, $sql);
+          if (!$result) {
+              echo("Error in SQL query: " . pg_last_error() . "<br>\n");
+          }
+	    echo "updated ".$outdatedroute['fromlocation']."->".$outdatedroute['tolocation']."<br>";
+        
+          $updatedroutes++;
+      }
+      echo "updated $updatedroutes routes<br>";
+      }
+  }
+  flush();
+?>

--- a/betweenpoint.move.php
+++ b/betweenpoint.move.php
@@ -66,21 +66,26 @@
       $nodelat = (int)($lat * 10000000);
       $nodelon = (int)($lng * 10000000);
       echo($nodelat . "," . $nodelon . "=$geoPo<br>");
-      $sql = "UPDATE stops SET geohash='$geoPo', lat='$nodelat', lng='$nodelon' WHERE geohash = '{$_REQUEST['oldgeopo']}'";
+      $sql = "UPDATE stops SET geohash='$geoPo', lat='$nodelat', lng='$nodelon', name=null, suburb=null WHERE geohash = '{$_REQUEST['oldgeopo']}'";
       $result = pg_query($conn, $sql);
       if (!$result) {
           echo("Error in SQL query: " . pg_last_error() . "<br>\n");
+      } else if (pg_affected_rows($result) == 0) {
+	echo ("Error 0 points moved, please refresh page and try again");
       } else {
       echo $_REQUEST['oldgeopo'] . " replaced with $geoPo <br>";
       $updatedroutes = 0;
       $result_outdatedroutes = pg_query($conn, "Select * FROM between_stops where points LIKE '%" . $_REQUEST['oldgeopo'] . ";%'");
       while ($outdatedroute = pg_fetch_assoc($result_outdatedroutes)) {
           $newpoints = str_replace($_REQUEST['oldgeopo'], $geoPo, $outdatedroute['points']);
-          $sql = "UPDATE  between_stops set points='$newpoints' where fromlocation = '{$outdatedroute['fromlocation']}' AND tolocation = '{$outdatedroute['tolocation']}' ";
+          $sql = "UPDATE  between_stops set points='$newpoints' where
+	  fromlocation = '".pg_escape_string($outdatedroute['fromlocation']).
+	  "' AND tolocation = '".pg_escape_string($outdatedroute['tolocation'])."' ";
           $result = pg_query($conn, $sql);
           if (!$result) {
               echo("Error in SQL query: " . pg_last_error() . "<br>\n");
           }
+	  echo "updated ".$outdatedroute['fromlocation']."->".$outdatedroute['tolocation']."<br>";
           $updatedroutes++;
       }
       echo "updated $updatedroutes routes<br>";

--- a/betweenpoint.php
+++ b/betweenpoint.php
@@ -88,13 +88,28 @@
 function submitBetween () {
         $.post("betweenpoint.submit.php", $("#inputform").serialize(), function(html){
         $("#response").html(html);
-        //clearForms();
+        clearForms();
 	return false;
       });
 };
 function submitMove () {
         $.post("betweenpoint.move.php", $("#moveform").serialize(), function(html){
         $("#response").html(html);
+	clearForms();
+	return false;
+      });
+};
+function submitDelete () {
+        $.post("betweenpoint.delete.php", $("#moveform").serialize(), function(html){
+        $("#response").html(html);
+	clearForms();
+	return false;
+      });
+};
+function submitAdd () {
+        $.post("betweenpoint.add.php", $("#moveform").serialize(), function(html){
+        $("#response").html(html);
+	clearForms();
 	return false;
       });
 };
@@ -188,10 +203,11 @@
     
   }
 
- 
+ $processed = 0;
   foreach ($paths as $path => $routes) {
       if (!in_array($path, array_keys($completedPaths))) {
-          echo "<option value=\"$routes:$path\">" . sizeof(explode(";", $routes)) . " $path</option>\n";
+          echo "<option value=\"$routes:$path\"> $path ($routes) </option>\n";
+	  $processed++;
       } else {
 	$completedRoutes = explode(";", $completedPaths[$path]);
 	 $incompleteRoutes = "";
@@ -203,13 +219,14 @@
 	  
 	}
 	if ($incompleteRoutes != "") {
-	  echo "<option value=\"$incompleteRoutes:$path\">" . sizeof(explode(";", $incompleteRoutes)) . " $path</option>\n";
+	  echo "<option value=\"$incompleteRoutes:$path\"> $path ($incompleteRoutes) </option>\n";
+	  $processed++;
 	}
       }
       
   }
+  echo "</select>$processed";
 ?>
-</select>
  from <input type="text" name="from" id="from"/>
  to <input type="text" name="to" id="to"/>
 <br>
@@ -224,7 +241,8 @@
 oldgeopo <input type="text" name="oldgeopo" id="oldgeopo"/>
 newlatlng <input type="text" name="newlatlng" id="newlatlng" size="60"/>
  <input type="button" onclick="javascript:submitMove()" value="Move!">
-
+ <input type="button" onclick="javascript:submitAdd()" value="Add!">
+   <input type="button" onclick="javascript:submitDelete()" value="Delete!">
 </form> 
 <div id="response">
     <!-- Our message will be echoed out here -->

--- a/betweenpoint.submit.php
+++ b/betweenpoint.submit.php
@@ -5,7 +5,7 @@
   exit;

 }

 print_r($_REQUEST);

-$reverse=$_REQUEST["reverse"];

+$reverse=(isset($_REQUEST["reverse"]) ? $_REQUEST["reverse"] : "off");

 $from=pg_escape_string($_REQUEST["from"]);

 $to=pg_escape_string($_REQUEST["to"]);

 $routes=$_REQUEST["routes"] ;


--- a/busui/about.php
+++ b/busui/about.php
@@ -2,7 +2,22 @@
 include('common.inc.php');
 ?>
 <p>
+    Busness Time - An ACT bus timetable webapp
+Based on the maxious-canberra-transit-feed
+Uses jQuery Mobile, PHP, Ruby, Python, Google Transit Feed Specification tools, OpenTripPlanner, OpenLayers, OpenStreetMap, Cloudmade Geocoder and Tile Service
+
+Feedback encouraged; contact maxious@lambdacomplex.org
+    
 Some icons by Joseph Wain / glyphish.com
+
+
+Disclaimer: The content of this website is of a general and informative nature. Please check with printed timetables or those available on http://action.act.gov.au before your trip.
+Whilst every effort has been made to ensure the high quality and accuracy of the Site, the Author makes no warranty, 
+express or implied concerning the topicality, correctness, completeness or quality of the information, which is provided 
+"as is". The Author expressly disclaims all warranties, including but not limited to warranties of fitness for a particular purpose and warranties of merchantability. 
+All offers are not binding and without obligation. The Author expressly reserves the right, in his discretion, to suspend, 
+change, modify, add or remove portions of the Site and to restrict or terminate the use and accessibility of the Site 
+without prior notice. 
 <?
 include_footer();
 ?>

--- a/busui/common.inc.php
+++ b/busui/common.inc.php
@@ -27,7 +27,7 @@
 <!DOCTYPE html> 
 <html> 
 	<head> 
-	<title>bus.lambdacomplex.org - '.$pageTitle.'</title> 
+	<title>busness time - '.$pageTitle.'</title> 
 	';
          if (isDebug()) echo '<link rel="stylesheet"  href="jquery-mobile-1.0a2.css" />
         <script type="text/javascript" src="jquery-mobile-1.0a2.js"></script>';

--- a/busui/index.php
+++ b/busui/index.php
@@ -12,8 +12,8 @@
 ?>
 <div data-role="page" data-theme="b" id="jqm-home" class="ui-page ui-body-b ui-page-active">
 	<div id="jqm-homeheader">
-	    	<center><h1 id="jqm-logo"><img src="apple-touch-icon.png" alt="logo" width="64" height="64" /><br>
-		bus.lambdacomplex.org</h1></center>
+	    	<center><h3 id="jqm-logo"><img src="apple-touch-icon.png" alt="logo" width="64" height="64" /><br>
+		busness time</h3></center>
 	</div> 
 	<div data-role="content">
 	    <a href="tripPlanner.php" data-role="button">Launch Trip Planner...</a>

--- a/busui/tripPlanner.php
+++ b/busui/tripPlanner.php
@@ -95,7 +95,7 @@
               $errorMessage .= urlencode($_REQUEST['from']) . " not found.<br>\n";
           tripPlanForm($errorMessage);
       } else {
-          $url = "http://localhost:8080/opentripplanner-api-webapp/ws/plan?_dc=1290254798856&arriveBy=false&date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces=";
+          $url = "http://10.1.0.243:5080/opentripplanner-api-webapp/ws/plan?_dc=1290254798856&arriveBy=false&date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces=";
           $ch = curl_init($url);
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
           curl_setopt($ch, CURLOPT_HEADER, 0);
@@ -123,3 +123,4 @@
   }
   include_footer();
 ?>
+

--- a/display.php
+++ b/display.php
@@ -18,7 +18,7 @@
 		// create the ol map object
 		var map = new OpenLayers.Map('map', options);
     
-var osmtiles = new OpenLayers.Layer.OSM("local", "http://localhost/tiles/${z}/${x}/${y}.png");
+var osmtiles = new OpenLayers.Layer.OSM("local", "http://10.0.1.154/tiles/${z}/${x}/${y}.png");
 // use http://open.atlas.free.fr/GMapsTransparenciesImgOver.php and http://code.google.com/p/googletilecutter/ to make tiles
  var graphic = new OpenLayers.Layer.Image(
                 'Weekday Bus Map',

--- a/displaytimepoints.georss.php
+++ b/displaytimepoints.georss.php
@@ -17,7 +17,7 @@
  echo "<entry>";

  echo "<summary>".htmlspecialchars ($timepoint['name'])."</summary>";

  echo "<title>".htmlspecialchars($timepoint['name'])."</title>";

-echo "<georss:point> ".($timepoint['lat']/10000000)." ".($timepoint['lng']/10000000)."</georss:point>";

+echo "<georss:point> ".($timepoint['lat']/10000001)." ".($timepoint['lng']/10000000)."</georss:point>";

 echo "</entry>\n";

 }

 


--- a/maxious-canberra-transit-feed/02-tidytimepoints.rb
+++ b/maxious-canberra-transit-feed/02-tidytimepoints.rb
@@ -32,9 +32,9 @@
  "Bridbabella GardensNursing Home"=> "Brindabella Gardens Nursing Home",
  "BrindabellaBusiness Park"=> "Brindabella Business Park",
  "NarrabundahTerminus"=>"Narrabundah Terminus",
+ "Narrabundah"=>"Narrabundah Terminus",
  "Railway StationKingston"=>"Railway Station Kingston",
  "Saint AndrewsVillage Hughes"=>"Saint Andrews Village Hughes",
- "DicksonAntill Street"=>"Dickson",
  "Cohen St Bus Station (Platform 3)" => "Cohen Street Bus Station (Platform 3)",
  "Cohen St Bus Station (Platform 6)" => "Cohen Street Bus Station (Platform 6)",
  "Newcastle Streetafter Isa Street" => "Newcastle Street after Isa Street",
@@ -53,6 +53,7 @@
  "Flemington Road / Sandford St"=>"Flemington Rd / Sandford St",
  "Heagney Cres Clift Cres Richardson"=>  "Heagney / Clift Richardson",
  "Charnwood (Tillyard Drive)"=> "Charnwood",
+ "Charnwood Tillyard Dr"=> "Charnwood",
  "charnwood"=> "Charnwood",
  "Black Moutain- Telstra Tower"=>"Black Mountain Telstra Tower",
  "Bonython Primary"=> "Bonython Primary School",
@@ -64,8 +65,8 @@
  "Calwell shops"=> "Calwell", 
  "Chuculba / William Slim Drive"=>"Chuculba / William Slim Dr",
  "Fyshwick direct Factory Outlet"=>"Fyshwick Direct Factory Outlet",
- "Kaleen Village / Maibrynong"=>"Kaleen Village / Marybrynong",
- "Kaleen Village / Marybrynong Ave"=>"Kaleen Village / Marybrynong",
+ "Kaleen Village / Maibrynong"=>"Kaleen Village / Maribrynong",
+ "Kaleen Village / Marybrynong Ave"=>"Kaleen Village / Maribrynong",
  "National Aquarium"=>"National Zoo and Aquarium",
  "chisholm"=>"Chisholm",
  "O'connor"=>"O'Connor",
@@ -84,9 +85,11 @@
  "ANU Burton and Garran Hall Daley Rd" => "Burton and Garran Hall Daley Road",
  "Farrer Primary"=>"Farrer Primary School",
  "St Thomas More Campbell"=>"St Thomas More's Campbell",
+ "Lyneham"=>"Lyneham / Wattle St",
  "Lyneham Wattle Street"=>"Lyneham / Wattle St",
- "Dickson" => "Dickson / Antill St",
+ "Dickson" => "Dickson / Cowper St",
  'Dickson Antill Street' => 'Dickson / Antill St',
+ "DicksonAntill Street"=> 'Dickson / Antill St',
  "Livingston / Kambah" => "Kambah / Livingston St",
  'Melba shops' => 'Melba',
  'St Clare of Assisi' => 'St Clare of Assisi Primary',

--- a/maxious-canberra-transit-feed/04-locatebetweenpoints.osm.xml.php
+++ b/maxious-canberra-transit-feed/04-locatebetweenpoints.osm.xml.php
@@ -2,7 +2,7 @@
 header('Content-Type: application/xml');

 echo "<?xml version='1.0' encoding='UTF-8'?>

 <osm version='0.6' generator='xapi: OSM Extended API 2.0' xmlns:xapi='http://www.informationfreeway.org/xapi/0.6' 

-xapi:uri='/api/0.6/*[bbox=148.98,-35.48,149.25,-35.15]' xapi:planetDate='20100630' xapi:copyright='2010 OpenStreetMap contributors' 

+xapi:uri='/api/0.6/*[bbox=148.98,-35.48,149.21,-35.15]' xapi:planetDate='20100630' xapi:copyright='2010 OpenStreetMap contributors' 

 xapi:license='Creative commons CC-BY-SA 2.0' xapi:bugs='For assistance or to report bugs contact 80n80n@gmail.com' xapi:instance='zappyHyper'>

 ";

 $conn = pg_connect("dbname=openstreetmap user=postgres password=snmc");


--- a/maxious-canberra-transit-feed/04-locatebetweenpoints.reversegeocode.php
+++ b/maxious-canberra-transit-feed/04-locatebetweenpoints.reversegeocode.php
@@ -25,9 +25,8 @@
       echo "Processing ".$stop['geohash'] . " streetname ... ";
       $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?around=".($stop['lat']/10000000).",".($stop['lng']/10000000)."&distance=closest&object_type=road";
       $contents = json_decode(getPage($url));
-      print_r($contents);
+      //print_r($contents);
       $name = $contents->features[0]->properties->name;
-      //todo suburb/locality select * from suburbs where the_geom @> 'POINT(149.075704592122 -35.21751569325)'::geometry
       echo "Saving $name ! <br>" ;
       $result_save = pg_query($conn, "UPDATE stops set name = '".pg_escape_string($name)."' where geohash = '{$stop['geohash']}' ");
 			      if (!$result_save) {

--- a/maxious-canberra-transit-feed/cbrtable.yml
+++ b/maxious-canberra-transit-feed/cbrtable.yml
@@ -17,14 +17,14 @@
   - { name: Aranda,stop_code: Aranda, lat: -35.257534, lng: 149.0762963}
   - { name: Athllon / Sulwood Kambah,stop_code: Athllon / Sulwood Kambah, lat: -35.38442, lng: 149.09328}
   - { name: Australian Institute of Sport,stop_code: Australian Institute of Sport, lat: -35.246351, lng: 149.101478}
-  - { name: Belconnen Community Bus Station,stop_code: Belconnen Community Bus Station, lat: -35.23987, lng: 149.0619}
+  - { name: Belconnen Community Bus Station,stop_code: Belconnen Community Bus Station, lat: -35.2398858, lng: 149.0690795}
   - { name: Belconnen Community Bus Station (Platform 1),stop_code: Belconnen Community Bus Station (Platform 1), lat: -35.23982, lng: 149.06978}
   - { name: Belconnen Community Bus Station (Platform 2),stop_code: Belconnen Community Bus Station (Platform 2), lat: -35.23982, lng: 149.06926}
   - { name: Belconnen Community Bus Station (Platform 3),stop_code: Belconnen Community Bus Station (Platform 3), lat: -35.23986, lng: 149.06847}
   - { name: Belconnen Community Bus Station (Platform 4),stop_code: Belconnen Community Bus Station (Platform 4), lat: -35.23994, lng: 149.06887}
   - { name: Belconnen Community Bus Station (Platform 5),stop_code: Belconnen Community Bus Station (Platform 5), lat: -35.23994, lng: 149.06928}
   - { name: Belconnen Community Bus Station (Platform 6),stop_code: Belconnen Community Bus Station (Platform 6), lat: -35.23994, lng: 149.0698}
-  - { name: Belconnen Way,stop_code: Belconnen Way, lat: -35.24809, lng: 149.06765}
+  - { name: Belconnen Way,stop_code: Belconnen Way, lat: -35.2410162, lng: 149.0409512}
   - { name: Bimberi Centre,stop_code: Bimberi Centre, lat: -35.2219941, lng: 149.1546928}
   - { name: Black Mountain Telstra Tower,stop_code: Black Mountain Telstra Tower, lat: -35.2748058, lng: 149.0972461}
   - { name: Bonython,stop_code: Bonython, lat: -35.4297416, lng: 149.0814517}
@@ -32,16 +32,10 @@
   - { name: Botanic Gardens,stop_code: Botanic Gardens, lat: -35.278643, lng: 149.1093237}
   - { name: Brindabella Business Park,stop_code: Brindabella Business Park, lat: -35.314496, lng: 149.189145}
   - { name: Brindabella Gardens Nursing Home,stop_code: Brindabella Gardens Nursing Home, lat: -35.3294459, lng: 149.0806116}
-  - { name: Bugden Sternberg,stop_code: Bugden Sternberg, lat: -35.4017223, lng: 149.0992172}
+  - { name: Bugden Sternberg,stop_code: Bugden Sternberg, lat: -35.403233, lng: 149.1073117}
   - { name: Burton and Garran Hall Daley Road,stop_code: Burton and Garran Hall Daley Road, lat: -35.2753671, lng: 149.1172822}
   - { name: Calvary Hospital,stop_code: Calvary Hospital, lat: -35.25212, lng: 149.09088}
   - { name: Calwell,stop_code: Calwell, lat: -35.43524, lng: 149.113942}
-  - { name: Cameron Ave Bus Station,stop_code: Cameron Ave Bus Station, lat: -35.2410195, lng: 149.0722506}
-  - { name: Cameron Ave Bus Station (Platform 1),stop_code: Cameron Ave Bus Station (Platform 1), lat: -35.2410195, lng: 149.0722506}
-  - { name: Cameron Ave Bus Station (Platform 2),stop_code: Cameron Ave Bus Station (Platform 2), lat: -35.2410108, lng: 149.0717142}
-  - { name: Cameron Ave Bus Station (Platform 3),stop_code: Cameron Ave Bus Station (Platform 3), lat: -35.2410064, lng: 149.0710758}
-  - { name: Cameron Ave Bus Station (Platform 4),stop_code: Cameron Ave Bus Station (Platform 4), lat: -35.2411773, lng: 149.0709793}
-  - { name: Cameron Ave Bus Station (Platform 5),stop_code: Cameron Ave Bus Station (Platform 5), lat: -35.241186, lng: 149.0720789}
   - { name: Campbell Park Offices,stop_code: Campbell Park Offices, lat: -35.28368, lng: 149.17045}
   - { name: Canberra College Weston Campus,stop_code: Canberra College Weston Campus, lat: -35.3490278, lng: 149.0486277}
   - { name: Canberra Hospital,stop_code: Canberra Hospital, lat: -35.3459462, lng: 149.1012001}
@@ -53,7 +47,7 @@
   - { name: Charnwood,stop_code: Charnwood, lat: -35.2052138, lng: 149.0337266}
   - { name: Charnwood Tillyard Dr,stop_code: Charnwood Tillyard Dr, lat: -35.20295, lng: 149.04027}
   - { name: Chifley,stop_code: Chifley, lat: -35.350985, lng: 149.077319}
-  - { name: Chisholm,stop_code: Chisholm, lat: -35.41341, lng: 149.12833}
+  - { name: Chisholm,stop_code: Chisholm, lat: -35.41341, lng: 149.1308079}
   - { name: Chuculba / William Slim Dr,stop_code: Chuculba / William Slim Dr, lat: -35.208931, lng: 149.088499}
   - { name: CIT Weston,stop_code: CIT Weston, lat: -35.330234, lng: 149.058632}
   - { name: City Bus Station,stop_code: City Bus Station, lat: -35.2794346, lng: 149.1305879}
@@ -68,8 +62,6 @@
   - { name: City Bus Station (Platform 8),stop_code: City Bus Station (Platform 8), lat: -35.2778798, lng: 149.1305995}
   - { name: City Bus Station (Platform 9),stop_code: City Bus Station (Platform 9), lat: -35.2783224, lng: 149.130726}
   - { name: City West,stop_code: City West, lat: -35.2788605, lng: 149.1257969}
-  - { name: Cnr Kerrigan/Lhotsky,stop_code: Cnr Kerrigan/Lhotsky, lat: -35.1995716, lng: 149.0285277}
-  - { name: Cnr Tillyard Dr & Spalding St,stop_code: Cnr Tillyard Dr & Spalding St, lat: -35.2040477, lng: 149.0393052}
   - { name: Cohen Street Bus Station,stop_code: Cohen Street Bus Station, lat: -35.2394775, lng: 149.0602031}
   - { name: Cohen Street Bus Station (Platform 1),stop_code: Cohen Street Bus Station (Platform 1), lat: -35.2394775, lng: 149.0602031}
   - { name: Cohen Street Bus Station (Platform 2),stop_code: Cohen Street Bus Station (Platform 2), lat: -35.2396467, lng: 149.0602152}
@@ -83,16 +75,16 @@
   - { name: Copland College,stop_code: Copland College, lat: -35.2127018, lng: 149.0596387}
   - { name: Curtin,stop_code: Curtin, lat: -35.3248779, lng: 149.081441}
   - { name: Deakin,stop_code: Deakin, lat: -35.3158608, lng: 149.1084563}
-  - { name: Deamer / Clift Richardson,stop_code: Deamer / Clift Richardson, lat: -35.4319597, lng: 149.1187876}
+  - { name: Deamer / Clift Richardson,stop_code: Deamer / Clift Richardson, lat: -35.4294463, lng: 149.12}
   - { name: Dickson / Antill St,stop_code: Dickson / Antill St, lat: -35.2489, lng: 149.14012}
   - { name: Dickson College,stop_code: Dickson College, lat: -35.24923, lng: 149.15315}
   - { name: Dickson / Cowper St,stop_code: Dickson / Cowper St, lat: -35.250297, lng: 149.141336}
   - { name: Duffy,stop_code: Duffy, lat: -35.3366908, lng: 149.0324311}
   - { name: Duffy Primary,stop_code: Duffy Primary, lat: -35.334219, lng: 149.033656}
-  - { name: Dunlop,stop_code: Dunlop, lat: -35.1942693, lng: 149.0206702}
+  - { name: Dunlop,stop_code: Dunlop, lat: -35.1981771, lng: 149.0207837}
   - { name: Erindale Centre,stop_code: Erindale Centre, lat: -35.4038881, lng: 149.0992283}
   - { name: Erindale Dr / Charleston St Monash,stop_code: Erindale Dr / Charleston St Monash, lat: -35.414616, lng: 149.07888}
-  - { name: Erindale / Sternberg Cres,stop_code: Erindale / Sternberg Cres, lat: -35.4014472, lng: 149.0956545}
+  - { name: Erindale / Sternberg Cres,stop_code: Erindale / Sternberg Cres, lat: -35.4028919, lng: 149.1060672}
   - { name: Evatt,stop_code: Evatt, lat: -35.2091093, lng: 149.0735343}
   - { name: Eye Hospital,stop_code: Eye Hospital, lat: -35.3341884, lng: 149.1656213}
   - { name: Fairbairn Park,stop_code: Fairbairn Park, lat: -35.3001773, lng: 149.2041185}
@@ -105,8 +97,8 @@
   - { name: Flemington Rd / Sandford St,stop_code: Flemington Rd / Sandford St, lat: -35.221231, lng: 149.144645}
   - { name: Florey,stop_code: Florey, lat: -35.2258544, lng: 149.0546214}
   - { name: Flynn,stop_code: Flynn, lat: -35.2019283, lng: 149.0478356}
-  - { name: Fraser,stop_code: Fraser, lat: -35.1896539, lng: 149.0435012}
-  - { name: Fraser East Terminus,stop_code: Fraser East Terminus, lat: -35.1896539, lng: 149.0435012}
+  - { name: Fraser,stop_code: Fraser, lat: -35.1929304, lng: 149.0433893}
+  - { name: Fraser East Terminus,stop_code: Fraser East Terminus, lat: -35.1896539, lng: 149.04811}
   - { name: Fraser West Terminus,stop_code: Fraser West Terminus, lat: -35.191513, lng: 149.038006}
   - { name: Fyshwick Direct Factory Outlet,stop_code: Fyshwick Direct Factory Outlet, lat: -35.3359862, lng: 149.1796322}
   - { name: Fyshwick Terminus,stop_code: Fyshwick Terminus, lat: -35.3285202, lng: 149.1785592}
@@ -114,8 +106,8 @@
   - { name: Geoscience Australia,stop_code: Geoscience Australia, lat: -35.3429702, lng: 149.1583893}
   - { name: Giralang,stop_code: Giralang, lat: -35.2115608, lng: 149.0960692}
   - { name: Gordon Primary,stop_code: Gordon Primary, lat: -35.455517, lng: 149.086978}
-  - { name: Gowrie,stop_code: Gowrie, lat: -35.4120264, lng: 149.1110804}
-  - { name: Gungahlin Marketplace,stop_code: Gungahlin Marketplace, lat: -35.1769532, lng: 149.1319017}
+  - { name: Gowrie,stop_code: Gowrie, lat: -35.4141373, lng: 149.1100798}
+  - { name: Gungahlin Marketplace,stop_code: Gungahlin Marketplace, lat: -35.183259, lng: 149.1328249}
   - { name: Gwydir Square Kaleen,stop_code: Gwydir Square Kaleen, lat: -35.2338677, lng: 149.1031998}
   - { name: Hackett,stop_code: Hackett, lat: -35.2481617, lng: 149.1626094}
   - { name: Hawker,stop_code: Hawker, lat: -35.2437386, lng: 149.0432804}
@@ -132,32 +124,24 @@
   - { name: Isabella,stop_code: Isabella, lat: -35.4285703, lng: 149.0916837}
   - { name: Jamison Centre,stop_code: Jamison Centre, lat: -35.2527268, lng: 149.0713712}
   - { name: John James Hospital,stop_code: John James Hospital, lat: -35.3200295, lng: 149.0955996}
-  - { name: Kaleen Village / Marybrynong,stop_code: Kaleen Village / Marybrynong, lat: -35.2274031, lng: 149.1075421}
+  - { name: Kaleen Village / Maribrynong,stop_code: Kaleen Village / Maribrynong, lat: -35.2197554, lng: 149.1029934}
   - { name: Kambah High,stop_code: Kambah High, lat: -35.3847749, lng: 149.0720245}
-  - { name: Kambah / Livingston St,stop_code: Kambah / Livingston St, lat: -35.3883359, lng: 149.0811471}
+  - { name: Kambah / Livingston St,stop_code: Kambah / Livingston St, lat: -35.3902193, lng: 149.0781883}
   - { name: Kambah Village,stop_code: Kambah Village, lat: -35.3800314, lng: 149.0576581}
   - { name: Katherine Ave / Horse Park Drive,stop_code: Katherine Ave / Horse Park Drive, lat: -35.1680901, lng: 149.1321801}
   - { name: Kerrigan / Lhotsky,stop_code: Kerrigan / Lhotsky, lat: -35.193801, lng: 149.035689}
   - { name: Kings Ave / National Circuit,stop_code: Kings Ave / National Circuit, lat: -35.305004, lng: 149.13262}
-  - { name: Kingston,stop_code: Kingston, lat: -35.3197448, lng: 149.1375261}
+  - { name: Kingston,stop_code: Kingston, lat: -35.3161906, lng: 149.1398308}
   - { name: Kippax,stop_code: Kippax, lat: -35.22225, lng: 149.0195627}
   - { name: Kippax Centre,stop_code: Kippax Centre, lat: -35.22172, lng: 149.01995}
   - { name: Kosciuszko / Everard,stop_code: Kosciuszko / Everard, lat: -35.188901, lng: 149.1216937}
   - { name: Lanyon Marketplace,stop_code: Lanyon Marketplace, lat: -35.4573, lng: 149.09199}
   - { name: Latham,stop_code: Latham, lat: -35.21848, lng: 149.03214}
   - { name: Latham Post Office,stop_code: Latham Post Office, lat: -35.21906, lng: 149.03223}
-  - { name: Lathlain St Bus Station,stop_code: Lathlain St Bus Station, lat: -35.2396657, lng: 149.0633993}
-  - { name: Lathlain St Bus Station (Platform 1),stop_code: Lathlain St Bus Station (Platform 1), lat: -35.2408973, lng: 149.0639887}
-  - { name: Lathlain St Bus Station (Platform 2),stop_code: Lathlain St Bus Station (Platform 2), lat: -35.2406038, lng: 149.0638922}
-  - { name: Lathlain St Bus Station (Platform 3),stop_code: Lathlain St Bus Station (Platform 3), lat: -35.2400517, lng: 149.0637152}
-  - { name: Lathlain St Bus Station (Platform 4),stop_code: Lathlain St Bus Station (Platform 4), lat: -35.2396657, lng: 149.0633993}
-  - { name: Lathlain St Bus Station (Platform 5),stop_code: Lathlain St Bus Station (Platform 5), lat: -35.2405468, lng: 149.0636669}
-  - { name: Lathlain St Bus Station (Platform 6),stop_code: Lathlain St Bus Station (Platform 6), lat: -35.2410486, lng: 149.0638326}
   - { name: Lewis Luxton/Woodcock Dr,stop_code: Lewis Luxton/Woodcock Dr, lat: -35.4422566, lng: 149.0854375}
-  - { name: Lithgow St Terminus Fyshwick,stop_code: Lithgow St Terminus Fyshwick, lat: -35.3296912, lng: 149.1668153}
-  - { name: Lyneham,stop_code: Lyneham, lat: -35.2523304, lng: 149.1246184}
+  - { name: Lithgow St Terminus Fyshwick,stop_code: Lithgow St Terminus Fyshwick, lat: -35.3310543, lng: 149.1635094}
   - { name: Lyneham High,stop_code: Lyneham High, lat: -35.2524016, lng: 149.130254}
-  - { name: Lyneham / Wattle St,stop_code: Lyneham / Wattle St, lat: -35.25205, lng: 149.12524}
+  - { name: Lyneham / Wattle St,stop_code: Lyneham / Wattle St, lat: -35.251719, lng: 149.1239146}
   - { name: Lyons,stop_code: Lyons, lat: -35.3415779, lng: 149.0765703}
   - { name: Macarthur / Miller O'Connor,stop_code: Macarthur / Miller O'Connor, lat: -35.2587584, lng: 149.1153561}
   - { name: Macarthur / Northbourne Ave,stop_code: Macarthur / Northbourne Ave, lat: -35.26051, lng: 149.13224}
@@ -178,9 +162,8 @@
   - { name: Monash Goodwin Village,stop_code: Monash Goodwin Village, lat: -35.421084, lng: 149.097438}
   - { name: Monash Primary,stop_code: Monash Primary, lat: -35.414879, lng: 149.089411}
   - { name: Mount Neighbour School,stop_code: Mount Neighbour School, lat: -35.382445, lng: 149.051518}
-  - { name: Narrabundah,stop_code: Narrabundah, lat: -35.332605, lng: 149.154049}
   - { name: Narrabundah College,stop_code: Narrabundah College, lat: -35.3362106, lng: 149.1471005}
-  - { name: Narrabundah Terminus,stop_code: Narrabundah Terminus, lat: -35.332605, lng: 149.154049}
+  - { name: Narrabundah Terminus,stop_code: Narrabundah Terminus, lat: -35.3311332, lng: 149.1584454}
   - { name: National Circ / Canberra Ave,stop_code: National Circ / Canberra Ave, lat: -35.31407, lng: 149.13011}
   - { name: National Hockey Centre Lyneham,stop_code: National Hockey Centre Lyneham, lat: -35.2446729, lng: 149.1288303}
   - { name: National Museum of Australia,stop_code: National Museum of Australia, lat: -35.29248, lng: 149.1205367}
@@ -189,7 +172,7 @@
   - { name: Ngunnawal Primary,stop_code: Ngunnawal Primary, lat: -35.1688551, lng: 149.1112569}
   - { name: Nicholls Primary,stop_code: Nicholls Primary, lat: -35.1905592, lng: 149.0876716}
   - { name: Northbourne Avenue / Antill St,stop_code: Northbourne Avenue / Antill St, lat: -35.248287, lng: 149.134241}
-  - { name: North Lyneham,stop_code: North Lyneham, lat: -35.2385618, lng: 149.1221188}
+  - { name: North Lyneham,stop_code: North Lyneham, lat: -35.2401925, lng: 149.1255722}
   - { name: O'Connor,stop_code: O'Connor, lat: -35.2640376, lng: 149.1226107}
   - { name: Olims Hotel,stop_code: Olims Hotel, lat: -35.27597, lng: 149.1428}
   - { name: Outtrim / Duggan,stop_code: Outtrim / Duggan, lat: -35.435871, lng: 149.097692}
@@ -203,7 +186,6 @@
   - { name: Red Hill,stop_code: Red Hill, lat: -35.336505, lng: 149.131645}
   - { name: Rivett,stop_code: Rivett, lat: -35.3473758, lng: 149.0365438}
   - { name: Russell Offices,stop_code: Russell Offices, lat: -35.2973294, lng: 149.1508803}
-  - { name: Sainsbury Street,stop_code: Sainsbury Street, lat: -35.3885, lng: 149.09643}
   - { name: Saint Andrews Village Hughes,stop_code: Saint Andrews Village Hughes, lat: -35.328097, lng: 149.088685}
   - { name: Scullin,stop_code: Scullin, lat: -35.23356, lng: 149.04056}
   - { name: Shoalhaven / Katherine Ave,stop_code: Shoalhaven / Katherine Ave, lat: -35.16823, lng: 149.12791}
@@ -216,11 +198,11 @@
   - { name: Stromlo High Waramanga,stop_code: Stromlo High Waramanga, lat: -35.3551186, lng: 149.0547624}
   - { name: St Thomas More's Campbell,stop_code: St Thomas More's Campbell, lat: -35.286717, lng: 149.156836}
   - { name: Sydney Ave,stop_code: Sydney Ave, lat: -35.31193, lng: 149.13105}
-  - { name: Taverner St / Erindale Dr,stop_code: Taverner St / Erindale Dr, lat: -35.4059104, lng: 149.0809317}
+  - { name: Taverner St / Erindale Dr,stop_code: Taverner St / Erindale Dr, lat: -35.4103948, lng: 149.0867553}
   - { name: Tharwa Drive,stop_code: Tharwa Drive, lat: -35.458251, lng: 149.091652}
   - { name: Tharwa Drive / Knoke Ave,stop_code: Tharwa Drive / Knoke Ave, lat: -35.47281, lng: 149.08926}
   - { name: Tharwa Drive / Pockett Ave,stop_code: Tharwa Drive / Pockett Ave, lat: -35.47348, lng: 149.09178}
-  - { name: Theodore,stop_code: Theodore, lat: -35.4464808, lng: 149.1234651}
+  - { name: Theodore,stop_code: Theodore, lat: -35.4531254, lng: 149.1188345}
   - { name: Tillyard / Spalding,stop_code: Tillyard / Spalding, lat: -35.199204, lng: 149.044556}
   - { name: Torrens,stop_code: Torrens, lat: -35.3730889, lng: 149.087327}
   - { name: Tuggeranong Bus Station,stop_code: Tuggeranong Bus Station, lat: -35.41465, lng: 149.06537}
@@ -258,1431 +240,1496 @@
   - { name: Woden Bus Station (Platform 9),stop_code: Woden Bus Station (Platform 9), lat: -35.3442083, lng: 149.0877771}
   - { name: Woodcock / Clare Dennis,stop_code: Woodcock / Clare Dennis, lat: -35.4422566, lng: 149.0854375}
   - { name: Yarralumla,stop_code: Yarralumla, lat: -35.30725, lng: 149.0972}
-  - { name: Andrea Place,stop_code: Wjz1ceG, lat: -35.4375289, lng: 149.0757996}
-  - { name: Tarlton Place,stop_code: Wjz1kvl, lat: -35.4366017, lng: 149.0890756}
-  - { name: Don Dunstan Drive,stop_code: Wjz16U7, lat: -35.4302659, lng: 149.0722593}
-  - { name: Salmon Place,stop_code: WjrWY3_, lat: -35.3952466, lng: 149.0527528}
-  - { name: Crozier Circuit,stop_code: