Network 10 changes
--- a/betweenpoint.load.php
+++ /dev/null
@@ -1,76 +1,1 @@
-<?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;
-}
-
-/*
- * GeoPo Decode in PHP
- * @author : Shintaro Inagaki
- * @param $geopo (String)
- * @return $location (Array)
- */
-function geopoDecode($geopo) {
- // 64characters (number + big and small letter + hyphen + underscore)
- $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
- // Array for geolocation
- $location = array ();
-
- for ($i = 0; $i < strlen($geopo); $i++) {
- // What number of character that equal to a GeoPo code (0-63)
- $order = strpos($chars, substr($geopo, $i, 1));
- // Lat/Lng plus geolocation value of scale
- $location['lat'] = $location['lat'] + floor($order % 8) * pow(8, 9 - $i);
- $location['lng'] = $location['lng'] + floor($order / 8) * pow(8, 9 - $i);
- }
-
- // Change a decimal number to a degree measure, and plus revised value that shift center of area
- $location['lat'] = $location['lat'] * 180 / pow(8, 10) + 180 / pow(8, strlen($geopo)) / 2 - 90;
- $location['lng'] = $location['lng'] * 360 / pow(8, 10) + 360 / pow(8, strlen($geopo)) / 2 - 180;
- $location['scale'] = strlen($geopo);
-
- return $location;
-}
-
-$conn = pg_connect("dbname=bus user=postgres password=snmc");
-if (!$conn) {
- echo "An error occured.\n";
- exit;
-}
-$xml = simplexml_load_file("04-locatebetweenpoints.osm");
-
-/* Access the <rating> nodes of the first movie.
- * Output the rating scale, too. */
-foreach ($xml->node as $node) {
- $geoPo = geopoEncode((float)$node['lat'],(float)$node['lon']);
- $node['lat'] = (int) ((float)$node['lat']*10000000);
- $node['lon'] = (int) ((float)$node['lon']*10000000);
- echo($node['lat'].",".$node['lon']."=$geoPo<br>");
- $sql = "INSERT INTO stops (geohash, lat, lng) VALUES('$geoPo','{$node['lat']}','{$node['lon']}')";
- $result = pg_query($conn, $sql);
- if (!$result) {
- echo("Error in SQL query: " . pg_last_error() ."<br>\n");
- }
-flush();
-
-}
-?>
--- a/betweenpoint.php
+++ b/betweenpoint.php
@@ -126,7 +126,7 @@
if (($fname != '.') && ($fname != '..')) {
$timetable = Spyc::YAMLLoad("maxious-canberra-transit-feed/output/" . $fname);
// Strip off individual platforms because it usually doesn't matter for routes
- $timetable["time_points"] = preg_replace("/-.* Platform.*/","",$timetable["time_points"]);
+ $timetable["time_points"] = preg_replace("/(Platform.*/","",$timetable["time_points"]);
for ($i = 0; $i < sizeof($timetable["time_points"]) - 1; $i++) {
@$paths[trim($timetable["time_points"][$i]) . "->" . trim($timetable["time_points"][$i + 1])] .= $timetable["short_name"] . ";";
}
--- a/busui/list.php
+++ /dev/null
@@ -1,22 +1,1 @@
-<div id="get">
- <div class="toolbar">
- <h1>GET Example</h1>
- <a class="back" href="#">AJAX</a>
- </div>
- <div class="info">
- This page was loaded via AJAX.
- </div>
- <ul class="rounded">
- <li><a href="#livetest">Test live events</a></li>
- </ul>
-</div>
-<div id="livetest">
- <div class="toolbar">
- <h1>Events test</h1>
- <a class="back" href="#">AJAX</a>
- <a class="button goback" href="#home">Home</a>
- </div>
- <div class="info">
- This is a test of live events.
- </div>
-</div>
+
--- a/busui/schedule_viewer.py
+++ b/busui/schedule_viewer.py
@@ -337,6 +337,14 @@
def handle_json_GET_stops(self, params):
schedule = self.server.schedule
return [StopToTuple(s) for s in schedule.GetStopList()]
+
+ def handle_json_GET_timingpoints(self, params):
+ schedule = self.server.schedule
+ matches = []
+ for s in schedule.GetStopList():
+ if s.stop_code.find("Wj") == -1:
+ matches.append(StopToTuple(s))
+ return matches
def handle_json_GET_stopsearch(self, params):
schedule = self.server.schedule
--- a/maxious-canberra-transit-feed/01-extracttimes.rb
+++ b/maxious-canberra-transit-feed/01-extracttimes.rb
@@ -14,10 +14,16 @@
timetable = {"between_stops" => [], "short_name" => short_name}
time_points = table.xpath('tr[1]//th').map do |tp|
if tp.content != "\302\240" && tp.content != "" && tp.content != "<br/>"
- timing_point = tp.content.squeeze(" ").gsub("\r\n Platform"," - Platform").gsub(" - "," - ").gsub("\n","").gsub("\r","").gsub("\\"," / ").strip
+ timing_point = tp.content.squeeze(" ").gsub("Bus Station"," Bus Station ").gsub(" Platform"," (Platform").gsub(" - "," - ").gsub("\n"," ").gsub("\r"," ").gsub("\t"," ").gsub("\\"," / ").gsub("/"," / ").gsub(",",", ").gsub("\302\240","").squeeze(" ").strip
+ if (tp.content.match('Platform'))
+ timing_point.concat(")")
+ end;
+ timing_point
end
end
time_points.delete(nil)
+ time_points.delete("WheelchairAccessible")
+ time_points.delete("Wheelchair Accessible")
timetable["time_points"] = time_points.to_a
timetable["long_name"] = "To " + time_points.last
periodtimes = []
@@ -27,8 +33,11 @@
time = time.gsub(/ *A\S?M/,"a").gsub(/ ?P\S?M/,"p").gsub("12:08 AM","1208x").gsub(":","").gsub("1.","1").gsub("2.","2")
time = time.gsub("3.","3").gsub("4.","4")
time = time.gsub("5.","5").gsub("6.","6").gsub("7.","7").gsub("8.","8").gsub("9.","9").gsub("10.","10")
- time = time.gsub("11.","11").gsub("12.","12").gsub(/\.+/,"-")
+ time = time.gsub("11.","11").gsub("12.","12").gsub(/\.+/,"-").gsub("\302\240","")
+ if time == "" then time = nil end
+ time
end
+ times.delete(nil)
if not times.empty?
if not (route = times.shift)
raise("TODO: account for shifting route numbers eg. intertown/redex 62/162")
@@ -42,7 +51,7 @@
timetable[period] = periodtimes.to_a
# pp timetable
filename = timetable["short_name"] + "-" + timetable["long_name"]+ "." + period + ".yml"
- filename = filename.downcase.gsub(" ","-").gsub("/","-")
+ filename = filename.downcase.gsub(" ","-").gsub("/","-").gsub("(","").gsub(")","")
puts "Saving " + filename
File.open("#{File.dirname(__FILE__)}/output/"+filename, "w") do |f|
f.write timetable.to_yaml
@@ -50,7 +59,6 @@
timetable
end
-#TODO fix route 934
Dir.glob("source-html/Route*.htm*") { |file|
puts "Opened " + file
doc = Nokogiri::HTML(open(file))
@@ -58,7 +66,7 @@
timetables = []
short_name = "";
doc.xpath('//title').each do |title|
- short_name = title.content.gsub("Route_","").gsub("Route ","").gsub(", ","/").squeeze(" ").strip
+ short_name = title.content.gsub("Route_","").gsub("Route ","").gsub(", ","/").gsub("ACTION Buses Timetable for ","").squeeze(" ").strip
end
if short_name == ""
raise "Route number(s) not found in <title> tag"
@@ -67,7 +75,15 @@
doc.xpath('//table[preceding::text()="Weekdays"]').each do |table|
timetables << makeTimetable(table, "stop_times", short_name)
end
-
+ doc.xpath('//table[preceding::text()="This timetable is effective from Monday 15th November 2010."]').each do |table|
+ timetables << makeTimetable(table, "stop_times", short_name)
+ end
+ #all tables are weekdays on some really malformatted timetables
+ if short_name == "170"
+ doc.xpath('//table').each do |table|
+ timetables << makeTimetable(table, "stop_times", short_name)
+ end
+ end
#weekends
doc.xpath('//table[preceding::text()="Saturdays" and following::a]').each do |table|
timetables << makeTimetable(table, "stop_times_saturday", short_name)
--- a/maxious-canberra-transit-feed/02-tidytimepoints.rb
+++ b/maxious-canberra-transit-feed/02-tidytimepoints.rb
@@ -2,9 +2,9 @@
require 'pp'
require 'yaml'
class Array
- def to_yaml_style
- :inline
- end
+ def to_yaml_style
+ :inline
+ end
end
Dir.chdir("output")
@@ -25,60 +25,26 @@
#pp $time_points_sources.sort
time_point_corrections = {"North Lynehamham" => "North Lyneham",
- "Lathlain St Platform 2" => "Lathlain St Bus Station - Platform 2",
- "Lathlain St Sation - Platform 5" => "Lathlain St Bus Station - Platform 5",
- "Lathlain Steet Station" => "Lathlain St Bus Station",
- "Lathlain St - Platform 3" => "Lathlain St Bus Station - Platform 3",
- "Lathlain Steet Station - Platform 3" => "Lathlain St Bus Station - Platform 3",
- "Lathlain St Station" => "Lathlain St Bus Station",
- "Lathlain St Station - Platform 1" => "Lathlain St Bus Station - Platform 1",
- "Lathlain St Station - Platform 2" => "Lathlain St Bus Station - Platform 2",
- "Lathlain St Station - Platform 3" => "Lathlain St Bus Station - Platform 3",
- "Lathlain St Station - Platform 4" => "Lathlain St Bus Station - Platform 4",
- "Lathlain St Station - Platform 5" => "Lathlain St Bus Station - Platform 5",
- "Lathlain St Station - Platform 6" => "Lathlain St Bus Station - Platform 6",
- "Flemington Rd, Sandford St" => "Flemington Rd/Sandford St",
- "Erindale Centre /Sternberg Crescent" => "Erindale Drive/Sternberg",
- "Canberra Hospita" => "Canberra Hospital",
- "Cohen Str Station - Platform 1" => "Cohen St Bus Station - Platform 1",
- "Cohen Street Station" => "Cohen St Bus Station",
- "Cohen Street Station - Platform 2" => "Cohen St Bus Station - Platform 2",
- "Cohn St Station - Platform 3" => "Cohen St Bus Station - Platform 3",
- "Cohen St Station" => "Cohen St Bus Station",
- "Cohen St Station - Platform 1" => "Cohen St Bus Station - Platform 1",
- "Cohen St Station - Platform 2" => "Cohen St Bus Station - Platform 2",
- "Cohen St Station - Platform 3" => "Cohen St Bus Station - Platform 3",
- "Cohen St Station - Platform 4" => "Cohen St Bus Station - Platform 4",
- "Cohen St Station - Platform 5" => "Cohen St Bus Station - Platform 5",
- "Cohen St Station - Platform 6" => "Cohen St Bus Station - Platform 6",
- "City - Platform 7" => "City Interchange - Platform 7",
- "Cameron Avenue Station" => "Cameron Ave Bus Station",
- "Cameron Avenue Station - Platform 1" => "Cameron Ave Bus Station - Platform 1",
- "Cameron Avenue Station - Platform 2" => "Cameron Ave Bus Station - Platform 2",
- "Cameron Avenue Station - Platform 3" => "Cameron Ave Bus Station - Platform 3",
- "Cameron Avenue Station - Platform 4" => "Cameron Ave Bus Station - Platform 4",
- "Cameron Avenue Station - Platform 5" => "Cameron Ave Bus Station - Platform 5",
- "Cameron Ave Station" => "Cameron Ave Bus Station",
- "Cameron Ave Station - Platform 1" => "Cameron Ave Bus Station - Platform 1",
- "Cameron Ave Station - Platform 2" => "Cameron Ave Bus Station - Platform 2",
- "Cameron Ave Station - Platform 3" => "Cameron Ave Bus Station - Platform 3",
- "Cameron Ave Station - Platform 4" => "Cameron Ave Bus Station - Platform 4",
- "Cameron Ave Station - Platform 5" => "Cameron Ave Bus Station - Platform 5",
- "Burton & Garranan Hall, Daley Road ANU" => "Burton & Garran Hall/Daley Road ANU",
- "Burton & Garranan Hall,Daley Road ANU" => "Burton & Garran Hall/Daley Road ANU",
- "Garran/Daley Rd" => "Burton & Garran Hall/Daley Road ANU",
- "Kingstons Ave/National Crt" => "Kings Ave/National Crt",
- "Newcastle Street after Isa St" => "Newcastle / Isa Street Fyshwick",
- "National Circ/Canberra Ave" => "National Circuit / Canberra Ave",
- "St Clare of Conder" => "St Clare of Assisi Primary",
- "McKillop College Isabella Campus" => "MacKillop College Isabella Campus",
- "Outrim / Duggan" => "Outtrim / Duggan",
- "Manuka Captain Cook" => "Manuka/Captain Cook",
- "Manuka, Captain Cook" => "Manuka/Captain Cook",
- "Hospice, Menindee Drive" => "Hospice",
- "Tharwa/Pocket" => "Tharwa/Pockett",
- "Paul-Co / Mirrabei" => "Paul Coe / Mirrabei"
- }
+ "Woden Bus Station Platform 10)" => "Woden Bus Station (Platform 10)",
+ "Saint AndrewsVillage Hughes"=>"Saint Andrews Village Hughes",
+ "Flemmington Road / Sandford St"=>"Flemington Road / Sandford St",
+ "City Interchange"=>"City Bus Station",
+ "City Interchange (Platform 9)"=>"City Bus Station (Platform 9)",
+ "Bridbabella Gardens Nursing Home"=>"Brindabella Gardens Nursing Home",
+ "Bridbabella GardensNursing Home"=> "Brindabella Gardens Nursing Home",
+ "BrindabellaBusiness Park"=> "Brindabella Business Park",
+ "NarrabundahTerminus"=>"Narrabundah Terminus",
+ "Railway StationKingston"=>"Railway Station Kingston",
+ "Saint AndrewsVillage Hughes"=>"Saint Andrews Village Hughes",
+ "Dickson ShopsAntill Street"=>"Dickson Shops",
+ "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",
+ "William Web / Ginninderra Drive"=>"William Webb / Ginninderra Drive",
+ "Procor / Mead"=>"Proctor / Mead",
+"Fyshwick DirectFactory Outlet"=>"Fyshwick Direct Factory Outlet"
+}
+
time_point_corrections.each do |wrong, right|
$time_points_sources[wrong].each do |wrongfile|
badtimetable = YAML::load_file(wrongfile)
@@ -86,7 +52,7 @@
badtimetable["time_points"][badentrynumber] = right
puts "Corrected '" + wrong + "' to '" + right + "' in " + wrongfile
File.open(wrongfile, "w") do |f|
- f.write badtimetable.to_yaml
+ f.write badtimetable.to_yaml
end
end
end
--- a/maxious-canberra-transit-feed/03-locatetimepoints.rb
+++ b/maxious-canberra-transit-feed/03-locatetimepoints.rb
@@ -1,10 +1,10 @@
#!/usr/bin/ruby
-require 'postgres'
require 'highline.rb'
include HighLine
require 'rubygems'
+require 'postgres'
require 'json'
require 'net/http'
def cbr_geocode(query)
@@ -51,13 +51,12 @@
connbus = PGconn.connect("localhost", 5432, '', '', "bus", "postgres",
"snmc")
-connosm = PGconn.connect("localhost", 5432, '', '', "openstreetmap",
-"postgres", "snmc")
+connosm = PGconn.connect("localhost", 5432, '', '', "openstreetmap", "postgres", "snmc")
if ask_if("Insert Timing Point names to database?")
$time_points.each do |time_point|
begin
- time_point = time_point.gsub(/\\/, '\&\&').gsub(/'/, "''").gsub("St", "%")
+ time_point = time_point.gsub(/\\/, '\&\&').gsub(/'/, "''")
res = connbus.exec("INSERT INTO timing_point (name) VALUES ('#{time_point}')")
puts "Put '#{time_point}' into DB"
rescue PGError => e
--- a/maxious-canberra-transit-feed/04-generateymlinclude.rb
+++ b/maxious-canberra-transit-feed/04-generateymlinclude.rb
@@ -44,8 +44,9 @@
# 0 = geoPo
# 1 = lat*100000
# 2 = lng*100000
+ # 3 = name
#pp time_point[0]
- f2.puts " - { name: #{stop[0]},stop_code: #{stop[0]}, lat: #{Float(stop[1])/10000000}, lng: #{Float(stop[2])/10000000}}"
+ f2.puts " - { name: #{stop[3]},stop_code: #{stop[0]}, lat: #{Float(stop[1])/10000000}, lng: #{Float(stop[2])/10000000}}"
end
f2.puts "routes:\n";
end
--- /dev/null
+++ b/maxious-canberra-transit-feed/04-locatebetweenpoints.reversegeocode.php
@@ -1,1 +1,38 @@
+<?php
+function getPage($url)
+{
+ $ch = curl_init($url);
+curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
+curl_setopt( $ch, CURLOPT_HEADER, 0 );
+$page = curl_exec($ch);
+curl_close($ch);
+return $page;
+}
+//
+// http://developers.cloudmade.com/wiki/geocoding-http-api/Documentation
+$conn = pg_connect("dbname=bus user=postgres password=snmc");
+if (!$conn) {
+ echo "An error occured.\n";
+ exit;
+}
+$sql = "Select * from stops where name is null";
+ $result_stops = pg_query($conn, $sql);
+ if (!$result_stops) {
+ cho("Error in SQL query: " . pg_last_error() ."<br>\n");
+ }
+ while ($stop = pg_fetch_assoc($result_stops)) {
+ echo "Processing ".$stop['geohash'] . " ... ";
+ $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));
+ $name = $contents->features[0]->properties->name;
+ echo "Saving $name ! <br>" ;
+ $result_save = pg_query($conn, "UPDATE stops set name = '".pg_escape_string($name)."' where geohash = '{$stop['geohash']}' ");
+ if (!$result_save) {
+ echo("Error in SQL query: " . pg_last_error() ."<br>\n");
+ }
+ flush();
+ }
+?>
+
+
--- a/maxious-canberra-transit-feed/05-addbetweenpointstotimetables.rb
+++ b/maxious-canberra-transit-feed/05-addbetweenpointstotimetables.rb
@@ -23,9 +23,11 @@
timetable["between_stops"] = {}
for i in 0..timetable["time_points"].length-2
begin
- searchFrom = timetable["time_points"][i].escape_single_quotes.split("-")[0].strip
- searchTo = timetable["time_points"][i+1].escape_single_quotes.split("-")[0].strip
-
+ searchFrom = timetable["time_points"][i].escape_single_quotes.split("(")[0].strip
+ searchTo = timetable["time_points"][i+1].escape_single_quotes.split("(")[0].strip
+ # print "SELECT * from between_stops
+ # WHERE fromlocation = '#{searchFrom}'
+ # AND tolocation = '#{searchTo}' AND routes LIKE '%#{route_name};%'"
between_points = connbus.exec("SELECT * from between_stops
WHERE fromlocation = '#{searchFrom}'
AND tolocation = '#{searchTo}' AND routes LIKE '%#{route_name};%'")
@@ -34,8 +36,9 @@
#conn.close() if conn
end
between_points.each do |between_point_row|
- timetable["between_stops"][timetable["time_points"][i] + '-' +timetable["time_points"][i+1]] \
- = between_point_row['points'].split(";");
+ points = between_point_row['points'].split(";")
+ points.delete("")
+ timetable["between_stops"][timetable["time_points"][i] + '-' +timetable["time_points"][i+1]] = points;
end
end
#pp timetable["between_stops"]
--- a/maxious-canberra-transit-feed/05-cleanupyaml.sh
+++ /dev/null
@@ -1,3 +1,1 @@
-#!/bin/bash
-sed -i "s/- ---/- /g" cbrtable.yml
--- a/maxious-canberra-transit-feed/createfeed.py
+++ b/maxious-canberra-transit-feed/createfeed.py
@@ -69,8 +69,10 @@
stopset = set()
for route in routedata:
stopset.update(route['time_points'])
- for between_list in route['between_stops']:
- stopset.update(route['between_stops'][between_list])
+ if len(route['between_stops']) > 0:
+ for between_list in route['between_stops']:
+ if route['between_stops'][between_list] != None:
+ stopset.update(route['between_stops'][between_list])
toprune = list()
for i, stop in enumerate(stopsdata):
--- a/maxious-canberra-transit-feed/gs.sh
+++ /dev/null
@@ -1,6 +1,1 @@
-gs_osmdb_compile ~/osm/canberra.osm canberra.osmdb
-gs_gtfsdb_build cbrfeed.zip canberra.gtfsdb
-gs_link_osm_gtfs map.gdb canberra.osmdb canberra.gtfsdb
-gs_import_osm
-gs_import_gtfs
--- a/maxious-canberra-transit-feed/output/10-to-cohen-st-station.stop_times.yml
+++ b/maxious-canberra-transit-feed/output/10-to-cohen-st-station.stop_times.yml
@@ -5,5 +5,5 @@
Cameron Ave Bus Station-Lathlain St Bus Station: []
short_name: "10"
stop_times: [["-", "-", "-", "-", "-", "-", 632a, 642a, 644a, 649a, 659a, 706a, 708a, 712a], ["-", "-", "-", "-", "-", "-", 702a, 712a, 714a, 719a, 729a, 736a, 738a, 742a], ["-", "-", "-", "-", "-", "-", 732a, 742a, 744a, 749a, 759a, 806a, 808a, 812a], ["-", "-", "-", "-", "-", "-", 802a, 812a, 814a, 819a, 829a, 836a, 838a, 842a], ["-", "-", "-", 800a, 803a, 808a, 820a, 830a, 832a, 837a, 847a, 854a, 856a, 900a], ["-", "-", "-", 830a, 833a, 838a, 850a, 900a, 902a, 907a, 917a, 924a, 926a, 930a], ["-", "-", "-", 900a, 903a, 908a, 920a, 930a, 932a, 937a, 947a, 954a, 956a, 1000a], [918a, 929a, 934a, 941a, 944a, 949a, 1001a, 1011a, 1013a, 1018a, 1028a, 1035a, 1037a, 1041a], [948a, 959a, 1004a, 1011a, 1014a, 1019a, 1031a, 1041a, 1043a, 1048a, 1058a, 1105a, 1107a, 1111a], [1018a, 1029a, 1034a, 1041a, 1044a, 1049a, 1101a, 1111a, 1113a, 1118a, 1128a, 1135a, 1137a, 1141a], [1048a, 1059a, 1104a, 1111a, 1114a, 1119a, 1131a, 1141a, 1143a, 1148a, 1158a, 1205p, 1207p, 1211p], [1118a, 1129a, 1134a, 1141a, 1144a, 1149a, 1201p, 1211p, 1213p, 1218p, 1228p, 1235p, 1237p, 1241p], [1148a, 1159a, 1204p, 1211p, 1214p, 1219p, 1231p, 1241p, 1243p, 1248p, 1258p, 105p, 107p, 111p], [1218p, 1229p, 1234p, 1241p, 1244p, 1249p, 101p, 111p, 113p, 118p, 128p, 135p, 137p, 141p], [1248p, 1259p, 104p, 111p, 114p, 119p, 131p, 141p, 143p, 148p, 158p, 205p, 207p, 211p], [118p, 129p, 134p, 141p, 144p, 149p, 201p, 211p, 213p, 218p, 228p, 235p, 237p, 241p], [148p, 159p, 204p, 211p, 214p, 219p, 231p, 241p, 243p, 248p, 258p, 305p, 307p, 311p], [218p, 229p, 234p, 241p, 244p, 249p, 301p, 311p, 314p, 319p, 329p, 336p, 338p, 342p], [248p, 259p, 304p, 311p, 315p, 320p, 332p, 342p, 345p, 350p, 400p, 407p, 409p, 413p], [318p, 329p, 334p, 341p, 345p, 350p, 402p, 412p, 415p, 420p, 430p, 437p, 439p, 443p], ["-", "-", "-", "-", "-", "-", 416p, 426p, 429p, 434p, 444p, 451p, 453p, 457p], [348p, 359p, 404p, 411p, 415p, 420p, 432p, 442p, 445p, 450p, 500p, 507p, 509p, 513p], ["-", "-", "-", "-", "-", "-", 446p, 456p, 459p, 504p, 514p, 521p, 523p, 527p], ["-", "-", 431p, 441p, 445p, 450p, 502p, 512p, 515p, 520p, 530p, 537p, 539p, 543p], ["-", "-", "-", "-", "-", "-", 516p, 526p, 529p, 534p, 544p, 551p, 553p, 557p], ["-", "-", 458p, 511p, 515p, 520p, 532p, 542p, 545p, 550p, 600p, 607p, 609p, 613p], ["-", "-", "-", "-", "-", "-", 546p, 556p, 559p, 604p, 614p, 621p, 623p, 627p], ["-", "-", "-", 540p, 544p, 549p, 601p, 611p, 614p, 619p, 629p, 636p, 638p, 641p], ["-", "-", "-", "-", "-", "-", 616p, 626p, 629p, 634p, 644p, 651p, 653p, 656p], ["-", "-", "-", 611p, 615p, 620p, 632p, 642p, 644p, 649p, 659p, 706p, 708p, 711p], ["-", "-", "-", "-", "-", "-", 736p, 746p, 748p, 753p, 803p, 810p, 812p, 815p], ["-", "-", "-", "-", "-", "-", 836p, 846p, 848p, 853p, 903p, 910p, 912p, 915p], ["-", "-", "-", "-", "-", "-", 936p, 946p, 948p, 953p, 1003p, 1010p, 1012p, 1015p], ["-", "-", "-", "-", "-", "-", 1036p, 1046p, 1048p, 1053p, 1103p, 1110p, 1112p, 1115p], ["-", "-", "-", "-", "-", "-", 1136p, 1146p, 1148p, 1153p, 1203a, 1210a, 1212a, 1215a]]
-time_points: [Fairbairn Park, Brindabella Business Park, Majura Business Park, Campbell Park Offices, ADFA, War Memorial, City Interchange - Platform 4, Caswell Drive, Aranda, Cook, Jamison Centre, Cameron Ave Bus Station, Lathlain St Bus Station, Cohen St Bus Station]
+time_points: [Fairbairn Park, Brindabella Business Park, Majura Business Park, Campbell Park Offices, ADFA, War Memorial, City Interchange (Platform 4), Caswell Drive, Aranda, Cook, Jamison Centre, Cameron Ave Bus Station, Lathlain St Bus Station, Cohen St Bus Station]
--- a/maxious-canberra-transit-feed/output/10-to-fairbairn-park.stop_times.yml
+++ b/maxious-canberra-transit-feed/output/10-to-fairbairn-park.stop_times.yml
@@ -1,9 +1,9 @@
---
long_name: To Fairbairn Park
between_stops:
- Cohen St Bus Station - Platform 2-Lathlain St Bus Station - Platform 3: []
- Lathlain St Bus Station - Platform 3-Cameron Ave Bus Station - Platform 3: []
+ Lathlain St Bus Station (Platform 3)-Cameron Ave Bus Station (Platform 3): []
+ Cohen St Bus Station (Platform 2)-Lathlain St Bus Station (Platform 3): []
short_name: "10"
stop_times: [[553a, 555a, 559a, 606a, 616a, 621a, 624a, 634a, "-", "-", "-", "-", "-", "-"], [624a, 626a, 630a, 637a, 647a, 652a, 655a, 705a, "-", "-", "-", "-", "-", "-"], [654a, 656a, 700a, 707a, 717a, 722a, 725a, 736a, 746a, 752a, 756a, 803a, "-", "-"], ["-", "-", "-", "-", 724a, 729a, 732a, 742a, "-", "-", "-", "-", "-", "-"], [709a, 711a, 715a, 722a, 732a, 737a, 740a, 750a, "-", "-", "-", "-", "-", "-"], [724a, 726a, 730a, 737a, 747a, 752a, 755a, 806a, 816a, 822a, 826a, 835a, "-", "-"], ["-", "-", "-", "-", 754a, 759a, 802a, 812a, "-", "-", "-", "-", "-", "-"], [739a, 741a, 745a, 752a, 802a, 807a, 810a, 820a, "-", "-", "-", "-", "-", "-"], [754a, 756a, 800a, 807a, 817a, 822a, 825a, 836a, 846a, 852a, 856a, "-", "-", "-"], ["-", "-", "-", 812a, 822a, 827a, 830a, 840a, "-", "-", "-", "-", "-", "-"], [809a, 811a, 815a, 822a, 832a, 837a, 840a, 851a, 901a, 907a, 911a, 918a, 927a, 935a], [824a, 826a, 830a, 837a, 847a, 852a, 855a, 905a, "-", "-", "-", "-", "-", "-"], [839a, 841a, 845a, 852a, 902a, 907a, 910a, 921a, 931a, 937a, 940a, 947a, 956a, 1004a], [854a, 856a, 900a, 907a, 917a, 922a, 925a, 935a, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 955a, 1005a, 1011a, 1014a, 1021a, 1030a, 1038a], [925a, 927a, 931a, 938a, 948a, 953a, 955a, 1005a, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 1025a, 1035a, 1041a, 1044a, 1051a, 1100a, 1108a], [957a, 959a, 1003a, 1010a, 1020a, 1025a, 1027a, 1037a, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 1055a, 1105a, 1111a, 1114a, 1121a, 1130a, 1138a], [1026a, 1028a, 1032a, 1039a, 1049a, 1054a, 1056a, 1106a, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 1125a, 1135a, 1141a, 1144a, 1151a, 1200p, 1208p], [1056a, 1058a, 1102a, 1109a, 1119a, 1124a, 1126a, 1136a, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 1155a, 1205p, 1211p, 1214p, 1221p, 1230p, 1238p], [1126a, 1128a, 1132a, 1139a, 1149a, 1154a, 1156a, 1206p, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 1225p, 1235p, 1241p, 1244p, 1251p, 100p, 108p], [1156a, 1158a, 1202p, 1209p, 1219p, 1224p, 1226p, 1236p, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 1255p, 105p, 111p, 114p, 121p, 130p, 138p], [1226p, 1228p, 1232p, 1239p, 1249p, 1254p, 1256p, 106p, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 125p, 135p, 141p, 144p, 151p, 200p, 208p], [1256p, 1258p, 102p, 109p, 119p, 124p, 126p, 136p, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 155p, 205p, 211p, 214p, 221p, 230p, 238p], [126p, 128p, 132p, 139p, 149p, 154p, 156p, 206p, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 225p, 235p, 241p, 244p, 251p, 300p, 308p], [156p, 158p, 202p, 209p, 219p, 224p, 226p, 236p, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 255p, 305p, 311p, 315p, 322p, 331p, 339p], [226p, 228p, 232p, 239p, 249p, 254p, 256p, 306p, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 329p, 339p, 345p, 349p, 356p, 405p, 413p], [256p, 258p, 302p, 309p, 319p, 324p, 326p, 336p, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 359p, 409p, 415p, 419p, 426p, 435p, 443p], [326p, 328p, 332p, 339p, 349p, 354p, 356p, 406p, "-", "-", "-", "-", "-", "-"], [341p, 343p, 347p, 354p, 404p, 409p, 411p, 421p, "-", "-", "-", "-", "-", "-"], [356p, 358p, 402p, 409p, 419p, 424p, 426p, 436p, "-", "-", "-", "-", "-", "-"], ["-", "-", "-", "-", "-", "-", "-", 447p, 457p, 503p, 507p, "-", "-", "-"], [411p, 413p, 417p, 424p, 434p, 439p, 441p, 451p, "-", "-", "-", "-", "-", "-"], [426p, 428p, 432p, 439p, 449p, 454p, 456p, 506p, "-", "-", "-", "-", "-", "-"], [441p, 443p, 447p, 454p, 504p, 509p, 511p, 521p, "-", "-", "-", "-", "-", "-"], [456p, 458p, 502p, 509p, 519p, 524p, 526p, 536p, "-", "-", "-", "-", "-", "-"], [511p, 513p, 517p, 524p, 534p, 539p, 541p, 551p, "-", "-", "-", "-", "-", "-"], [526p, 528p, 532p, 539p, 549p, 554p, 556p, 606p, "-", "-", "-", "-", "-", "-"], [541p, 543p, 547p, 554p, 604p, 609p, 611p, 621p, "-", "-", "-", "-", "-", "-"], [620p, 622p, 626p, 633p, 643p, 648p, 650p, 700p, "-", "-", "-", "-", "-", "-"], [720p, 722p, 725p, 732p, 742p, 747p, 749p, 759p, "-", "-", "-", "-