MyWay timeliness by stop/route
MyWay timeliness by stop/route

#!/bin/bash #!/bin/bash
#this script should be run from a fresh git checkout from github #this script should be run from a fresh git checkout from github
#ami base must have yum install lighttpd-fastcgi, git, tomcat6 #ami base must have yum install lighttpd-fastcgi, git, tomcat6
#php-cli php-gd tomcat6-webapps tomcat6-admin-webapps svn maven2 #php-cli php-gd tomcat6-webapps tomcat6-admin-webapps svn maven2
#postgres postgres-server php-pg #postgres postgres-server php-pg
#http://www.how2forge.org/installing-lighttpd-with-php5-and-mysql-support-on-fedora-12 #http://www.how2forge.org/installing-lighttpd-with-php5-and-mysql-support-on-fedora-12
   
cp /root/aws.php /tmp/ cp /root/aws.php /tmp/
mkdir /var/www/lib/staticmaplite/cache mkdir /var/www/lib/staticmaplite/cache
chcon -h system_u:object_r:httpd_sys_content_t /var/www chcon -h system_u:object_r:httpd_sys_content_t /var/www
chcon -R -h root:object_r:httpd_sys_content_t /var/www/* chcon -R -h root:object_r:httpd_sys_content_t /var/www/*
chcon -R -t httpd_sys_content_rw_t /var/www/lib/staticmaplite/cache chcon -R -t httpd_sys_content_rw_t /var/www/lib/staticmaplite/cache
chmod -R 777 /var/www/lib/staticmaplite/cache chmod -R 777 /var/www/lib/staticmaplite/cache
chcon -R -t httpd_sys_content_rw_t /var/www/labs/tiles chcon -R -t httpd_sys_content_rw_t /var/www/labs/tiles
chmod -R 777 /var/www/labs/tiles chmod -R 777 /var/www/labs/tiles
wget http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip \ wget http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip \
-O /var/www/cbrfeed.zip -O /var/www/cbrfeed.zip
   
createdb transitdata createdb transitdata
createlang -d transitdata plpgsql createlang -d transitdata plpgsql
psql -d transitdata -f /var/www/lib/postgis.sql psql -d transitdata -f /var/www/lib/postgis.sql
# curl https://github.com/maxious/ACTBus-ui/raw/master/transitdata.cbrfeed.sql.gz -o transitdata.cbrfeed.sql.gz # curl https://github.com/maxious/ACTBus-ui/raw/master/transitdata.cbrfeed.sql.gz -o transitdata.cbrfeed.sql.gz
#made with pg_dump transitdata | gzip -c > transitdata.cbrfeed.sql.gz #made with pg_dump transitdata | gzip -c > transitdata.cbrfeed.sql.gz
gunzip /var/www/transitdata.cbrfeed.sql.gz gunzip /var/www/transitdata.cbrfeed.sql.gz
psql -d transitdata -f /var/www/transitdata.cbrfeed.sql psql -d transitdata -f /var/www/transitdata.cbrfeed.sql
#createuser transitdata -SDRP #createuser transitdata -SDRP
#password transitdata #password transitdata
#psql -d transitdata -c \"GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips TO transitdata;\" #psql -d transitdata -c \"GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips TO transitdata;\"
  #psql -d transitdata -c "GRANT SELECT,INSERT ON TABLE myway_observations,myway_routes,myway_stops,myway_timingdeltas TO transitdata;"
  #psql -d transitdata -c "GRANT SELECT,INSERT,UPDATE ON TABLE myway_routes,myway_stops TO transitdata;"
  ##psql -d transitdata -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO transitdata;"
php /var/www/updatedb.php php /var/www/updatedb.php
   
wget http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \ wget http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \
-O /tmp/Graph.obj -O /tmp/Graph.obj
rm -rfv /usr/share/tomcat6/webapps/opentripplanner* rm -rfv /usr/share/tomcat6/webapps/opentripplanner*
wget http://s3-ap-southeast-1.amazonaws.com/busresources/opentripplanner-webapp.war \ wget http://s3-ap-southeast-1.amazonaws.com/busresources/opentripplanner-webapp.war \
-O /usr/share/tomcat6/webapps/opentripplanner-webapp.war -O /usr/share/tomcat6/webapps/opentripplanner-webapp.war
wget http://s3-ap-southeast-1.amazonaws.com/busresources/opentripplanner-api-webapp.war \ wget http://s3-ap-southeast-1.amazonaws.com/busresources/opentripplanner-api-webapp.war \
-O /usr/share/tomcat6/webapps/opentripplanner-api-webapp.war -O /usr/share/tomcat6/webapps/opentripplanner-api-webapp.war
/etc/init.d/tomcat6 restart /etc/init.d/tomcat6 restart
   
file:b/css/local.css.php (new)
  <?php
  header('Content-type: text/css');
  ob_start("compress");
  function compress($buffer) {
  /* remove comments */
  $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
  /* remove tabs, spaces, newlines, etc. */
  $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
  return $buffer;
  }
 
  echo '
  .ui-li-thumb, .ui-li-icon { position: relative; }
 
  .ui-navbar {
  width: 100%;
  }
  .ui-btn-inner {
  white-space: normal !important;
  }
  .ui-li-heading {
  white-space: normal !important;
  }
  .ui-listview-filter {
  margin: 0 !important;
  }
  .ui-icon-navigation {
  background-image: url('.$_REQUEST['labsPath'].'css/images/113-navigation.png);
  background-position: 1px 0;
  }
  .ui-icon-beaker {
  background-image: url('.$_REQUEST['labsPath'].'css/images/91-beaker-2.png);
  background-position: 1px 0;
  }
  #footer {
  text-size: 0.75em;
  text-align: center;
  }
  body {
  background-color: #F0F0F0;
  }
  #jqm-homeheader {
  text-align: center;
  }
  .viaPoints {
  display: none;
  text-size: 0.2em;
  }
  .min-width-480px .viaPoints {
  display: inline;
  }
  #extrainfo {
  visibility: hidden;
  display: none;
  }
  #servicewarning {
  padding: 1em;
  margin-bottom: 0.5em;
  text-size: 0.2em;
  background-color: #FF9;
  -moz-border-radius: 15px;
  border-radius: 15px;
  }
 
 
  #footer {
  clear:both;
  text-align:center;
  }
  // source http://webaim.org/techniques/skipnav/
  #skip a, #skip a:hover, #skip a:visited
  {
  position:absolute;
  left:0px;
  top:-500px;
  width:1px;
  height:1px;
  overflow:hidden;
  }
 
  #skip a:active, #skip a:focus
  {
  position:static;
  width:auto;
  height:auto;
  }';
 
  //if (false)
  echo '
  // adaptive layout from jQuery Mobile docs site
  .type-interior .content-secondary {
  border-right: 0;
  border-left: 0;
  margin: 10px -15px 0;
  background: #fff;
  border-top: 1px solid #ccc;
  }
  .type-home .ui-content {
  margin-top: 5px;
  }
  .type-interior .ui-content {
  padding-bottom: 0;
  }
  .content-secondary .ui-collapsible-contain {
  padding: 10px 15px;
 
  }
  .content-secondary .ui-collapsible-heading {
  margin: 0 0 30px;
  }
  .content-secondary .ui-collapsible-heading-collapsed,
  .content-secondary .ui-collapsible-content {
  padding:0;
  margin: 0;
  }
  @media all and (min-width: 650px){
  .content-secondary {
  text-align: left;
  float: left;
  width: 45%;
  background: none;
  border-top: 0;
  }
  .content-secondary,
  .type-interior .content-secondary {
  margin: 30px 0 20px 2%;
  padding: 20px 4% 0 0;
  background: none;
  }
  .type-index .content-secondary {
  padding: 0;
  }
  .type-index .content-secondary .ui-listview {
  margin: 0;
  }
  .content-primary {
  width: 45%;
  float: right;
  margin-top: 30px;
  margin-right: 1%;
  padding-right: 1%;
  }
  .content-primary ul:first-child {
  margin-top: 0;
  }
 
  .type-interior .content-primary {
  padding: 1.5em 6% 3em 0;
  margin: 0;
  }
  /* fix up the collapsibles - expanded on desktop */
  .content-secondary .ui-collapsible-heading {
  display: none;
  }
  .content-secondary .ui-collapsible-contain {
  margin:0;
  }
  .content-secondary .ui-collapsible-content {
  display: block;
  margin: 0;
  padding: 0;
  }
  .type-interior .content-secondary .ui-li-divider {
  padding-top: 1em;
  padding-bottom: 1em;
  }
  .type-interior .content-secondary {
  margin: 0;
  padding: 0;
  }
  }
  @media all and (min-width: 750px){
  .type-home .ui-content,
  .type-interior .ui-content {
  background-position: 39%;
  }
  .content-secondary {
  width: 34%;
  }
  .content-primary {
  width: 56%;
  padding-right: 1%;
  }
  .type-interior .ui-content {
  background-position: 34%;
  }
  }
 
  @media all and (min-width: 1200px){
  .type-home .ui-content{
  background-position: 38.5%;
  }
  .type-interior .ui-content {
  background-position: 30%;
  }
  .content-secondary {
  width: 30%;
  padding-right:6%;
  margin: 30px 0 20px 5%;
  }
  .type-interior .content-secondary {
  margin: 0;
  padding: 0;
  }
  .content-primary {
  width: 50%;
  margin-right: 5%;
  padding-right: 3%;
  }
  .type-interior .content-primary {
  width: 60%;
  }
  }';
  ob_end_flush();
  ?>
 
#!/bin/bash #!/bin/bash
#dotcloud postinstall #dotcloud postinstall
   
curl http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip \ curl http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip \
-o /home/dotcloud/current/cbrfeed.zip -o /home/dotcloud/current/cbrfeed.zip
wget http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \ curl http://s3-ap-southeast-1.amazonaws.com/busresources/Graph.obj \
-O /tmp/Graph.obj -o /tmp/Graph.obj
   
#db setup #db setup
#curl https://github.com/maxious/ACTBus-ui/raw/master/transitdata.cbrfeed.sql.gz -o transitdata.cbrfeed.sql.gz #curl https://github.com/maxious/ACTBus-ui/raw/master/transitdata.cbrfeed.sql.gz -o transitdata.cbrfeed.sql.gz
#curl https://github.com/maxious/ACTBus-ui/raw/master/lib/postgis.sql -o postgis.sql #curl https://github.com/maxious/ACTBus-ui/raw/master/lib/postgis.sql -o postgis.sql
#createlang -d transitdata plpgsql #createlang -d transitdata plpgsql
#psql -d transitdata -f postgis.sql #psql -d transitdata -f postgis.sql
#gunzip /var/www/transitdata.cbrfeed.sql.gz #gunzip /var/www/transitdata.cbrfeed.sql.gz
#psql -d transitdata -f transitdata.cbrfeed.sql #psql -d transitdata -f transitdata.cbrfeed.sql
#createuser transitdata -SDRP #createuser transitdata -SDRP
#password transitdata #password transitdata
#psql -c \"GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips TO transitdata;\" #psql -c \"GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips TO transitdata;\"
   
<?php <?php
// SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',') // SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',')
$suburbs = explode(",", "Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla"); $suburbs = explode(",", "Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla");
function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb", $collapsible = true) function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb", $collapsible = true, $twotone = false)
{ {
global $labsPath; global $labsPath;
$width = 300; $width = 300;
$height = 300; $height = 300;
$metersperpixel[9] = 305.492 * $width; $metersperpixel[9] = 305.492 * $width;
$metersperpixel[10] = 152.746 * $width; $metersperpixel[10] = 152.746 * $width;
$metersperpixel[11] = 76.373 * $width; $metersperpixel[11] = 76.373 * $width;
$metersperpixel[12] = 38.187 * $width; $metersperpixel[12] = 38.187 * $width;
$metersperpixel[13] = 19.093 * $width; $metersperpixel[13] = 19.093 * $width;
$metersperpixel[14] = 9.547 * $width; $metersperpixel[14] = 9.547 * $width;
$metersperpixel[15] = 4.773 * $width; $metersperpixel[15] = 4.773 * $width;
$metersperpixel[16] = 2.387 * $width; //$metersperpixel[16] = 2.387 * $width;
// $metersperpixel[17]=1.193*$width; // $metersperpixel[17]=1.193*$width;
$center = ""; $center = "";
$markers = ""; $markers = "";
$minlat = 999; $mapwidthinmeters = 50;
$minlon = 999;  
$maxlat = 0;  
$maxlon = 0;  
if (sizeof($mapPoints) < 1) return "map error"; if (sizeof($mapPoints) < 1) return "map error";
if (sizeof($mapPoints) === 1) { if (sizeof($mapPoints) === 1) {
if ($zoom == 0) $zoom = 14; if ($zoom == 0) $zoom = 14;
$markers.= "{$mapPoints[0][0]},{$mapPoints[0][1]},$markerimage"; $markers.= "{$mapPoints[0][0]},{$mapPoints[0][1]},$markerimage";
$center = "{$mapPoints[0][0]},{$mapPoints[0][1]}"; $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}";
} }
else { else {
foreach ($mapPoints as $index => $mapPoint) { foreach ($mapPoints as $index => $mapPoint) {
$markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . $markerImage . ($index + 1); if ($twotone && $index == 0) {
  $markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . "iconr" . ($index + 1);
  $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}";
  }
  else {
  $markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . $markerImage . ($index + 1);
  }
if ($index + 1 != sizeof($mapPoints)) $markers.= "|"; if ($index + 1 != sizeof($mapPoints)) $markers.= "|";
if ($mapPoint[0] < $minlat) $minlat = $mapPoint[0]; $dist = distance($mapPoints[0][0], $mapPoint[0][1], $mapPoint[0], $mapPoint[1]);
if ($mapPoint[0] > $maxlat) $maxlat = $mapPoint[0]; $mapwidthinmeters = ($dist > $mapwidthinmeters ? $dist : $mapwidthinmeters);
if ($mapPoint[1] < $minlon) $minlon = $mapPoint[1];  
if ($mapPoint[1] > $maxlon) $maxlon = $mapPoint[1];  
$totalLat+= $mapPoint[0]; $totalLat+= $mapPoint[0];
$totalLon+= $mapPoint[1]; $totalLon+= $mapPoint[1];
} }
if ($zoom == 0) { if ($zoom == 0) {
$mapwidthinmeters = distance($minlat, $minlon, $minlat, $maxlon); $mapwidthinmeters = distance($minlat, $minlon, $minlat, $maxlon);
foreach (array_reverse($metersperpixel, true) as $zoomLevel => $maxdistance) { foreach (array_reverse($metersperpixel, true) as $zoomLevel => $maxdistance) {
if ($zoom == 0 && $mapwidthinmeters < ($maxdistance + 50)) $zoom = $zoomLevel; if ($zoom == 0 && $mapwidthinmeters * 1.5 < ($maxdistance)) $zoom = $zoomLevel;
} }
} }
$center = $totalLat / sizeof($mapPoints) . "," . $totalLon / sizeof($mapPoints); $center = $totalLat / sizeof($mapPoints) . "," . $totalLon / sizeof($mapPoints);
} }
$output = ""; $output = "";
if ($collapsible) $output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>'; if ($collapsible) $output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>';
$output.= '<img class="map" src="' . curPageURL() . '/'. $labsPath. '/lib/staticmaplite/staticmap.php?center=' . $center . '&amp;zoom=' . $zoom . '&amp;size=' . $width . 'x' . $height . '&amp;markers=' . $output.= '<img class="map" src="' . curPageURL() . '/' . $labsPath . '/lib/staticmaplite/staticmap.php?center=' . $center . '&amp;zoom=' . $zoom . '&amp;size=' . $width . 'x' . $height . '&amp;markers=' . $markers . '" width=' . $width . ' height=' . $height . '>';
$markers . '" width=' . $width . ' height=' . $height . '>';  
if ($collapsible) $output.= '</div>'; if ($collapsible) $output.= '</div>';
return $output; return $output;
} }
function distance($lat1, $lng1, $lat2, $lng2, $roundLargeValues = false) function distance($lat1, $lng1, $lat2, $lng2, $roundLargeValues = false)
{ {
$pi80 = M_PI / 180; $pi80 = M_PI / 180;