Begin support of double service ids for each service period
--- a/include/common-transit.inc.php
+++ b/include/common-transit.inc.php
@@ -37,6 +37,17 @@
return 'saturday';
default:
return 'weekday';
+ }
+}
+function service_ids($service_period) {
+ switch ($service_period) {
+ case 'sunday':
+ return Array("2010-TUGGSUN-Sunday-20","2010-BELCSUN-Sunday-19");
+ case 'saturday':
+ return Array("2010-BELCSAT-Saturday-19","2010-TUGGSAT-Saturday-19");
+ default:
+ //return 'weekday';
+ return Array("2010-BELCMAST-Weekday-15","2010-TUGGMAST-Weekday-14");
}
}
--- a/include/db/route-dao.inc.php
+++ b/include/db/route-dao.inc.php
@@ -140,10 +140,10 @@
return $r;
}
-function getTimeInterpolatedRouteAtStop($routeID, $stop_id) {
+function getRouteAtStop($routeID, $stop_id) {
$nextTrip = getRouteNextTrip($routeID);
if ($nextTrip['trip_id']) {
- foreach (getTimeInterpolatedTrip($nextTrip['trip_id']) as $tripStop) {
+ foreach (getTripStopTimes($nextTrip['trip_id']) as $tripStop) {
if ($tripStop['stop_id'] == $stop_id)
return $tripStop;
}
@@ -220,6 +220,9 @@
function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) {
if ($service_period == "")
$service_period = service_period();
+ $service_ids = service_ids($service_period);
+ $sidA = $service_ids[0];
+ $sidB = $service_ids[1];
if ($limit != "")
$limitSQL = " LIMIT :limit ";
global $conn;
@@ -229,13 +232,14 @@
join trips on trips.trip_id = stop_times.trip_id
join routes on trips.route_id = routes.route_id
join stops on stops.stop_id = stop_times.stop_id
-WHERE service_id=:service_period
+WHERE (service_id=:service_periodA OR service_id=:service_periodB)
AND ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), :distance, FALSE)
group by service_id,trips.route_id,route_short_name,route_long_name
order by distance $limitSQL";
debug($query, "database");
$query = $conn->prepare($query);
- $query->bindParam(":service_period", $service_period);
+ $query->bindParam(":service_periodA", $sidA);
+ $query->bindParam(":service_periodB", $sidB);
$query->bindParam(":distance", $distance);
if ($limit != "")
$query->bindParam(":limit", $limit);
--- a/include/db/stop-dao.inc.php
+++ b/include/db/stop-dao.inc.php
@@ -141,13 +141,19 @@
function getStopRoutes($stopID, $service_period) {
if ($service_period == "")
$service_period = service_period();
+
+ $service_ids = service_ids($service_period);
+ $sidA = $service_ids[0];
+ $sidB = $service_ids[1];
global $conn;
$query = "SELECT distinct service_id,trips.route_id,route_short_name,route_long_name
FROM stop_times join trips on trips.trip_id =
-stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE stop_id = :stopID AND service_id=:service_period";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":service_period", $service_period);
+stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE stop_id = :stopID
+AND (service_id=:service_periodA OR service_id=:service_periodB)";
+ debug($query, "database");
+ $query = $conn->prepare($query);
+ $query->bindParam(":service_periodA", $sidA);
+ $query->bindParam(":service_periodB", $sidB);
$query->bindParam(":stopID", $stopID);
$query->execute();
if (!$query) {
@@ -160,6 +166,9 @@
function getStopTrips($stopID, $service_period = "", $afterTime = "", $limit = "") {
if ($service_period == "")
$service_period = service_period();
+ $service_ids = service_ids($service_period);
+ $sidA = $service_ids[0];
+ $sidB = $service_ids[1];
if ($limit != "")
$limitSQL = " LIMIT :limit ";
global $conn;
@@ -172,7 +181,7 @@
WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times
WHERE stop_times.stop_id = :stopID
AND stop_times.trip_id = end_times.trip_id
-AND service_id=:service_period
+AND (service_id=:service_periodA OR service_id=:service_periodB)
AND end_times.arrival_time > :afterTime
ORDER BY end_time $limitSQL";
} else {
@@ -182,12 +191,13 @@
stop_times.trip_id
join routes on trips.route_id = routes.route_id
WHERE stop_times.stop_id = :stopID
-AND service_id=:service_period
+AND (service_id=:service_periodA OR service_id=:service_periodB)
ORDER BY arrival_time $limitSQL";
}
debug($query, "database");
$query = $conn->prepare($query);
- $query->bindParam(":service_period", $service_period);
+ $query->bindParam(":service_periodA", $sidA);
+ $query->bindParam(":service_periodB", $sidB);
$query->bindParam(":stopID", $stopID);
if ($limit != "")
$query->bindParam(":limit", $limit);
@@ -219,7 +229,7 @@
$timedTrips[] = $trip;
}
} else {
- $timedTrip = getTimeInterpolatedTripAtStop($trip['trip_id'], $trip['stop_sequence']);
+ $timedTrip = getTripAtStop($trip['trip_id'], $trip['stop_sequence']);
if ($timedTrip['arrival_time'] > $time and strtotime($timedTrip['arrival_time']) < (strtotime($time) + $time_range)) {
$timedTrips[] = $timedTrip;
}
--- a/include/db/trip-dao.inc.php
+++ b/include/db/trip-dao.inc.php
@@ -53,6 +53,7 @@
}
return $query->fetchColumn(0);
}
+
function getTripStopTimes($tripID) {
global $conn;
$query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_lat,stop_lon,stop_name,stop_code,
@@ -71,136 +72,137 @@
return Array();
}
$stopTimes = $query->fetchAll();
- return $stopTimes;
-
-}
+ return $stopTimes;
+}
+
function getTripAtStop($tripID, $stop_sequence) {
global $conn;
- foreach (getTripStopTimes($tripID) as $tripStop) {
+ foreach (getTripStopTimes($tripID) as $tripStop) {
if ($tripStop['stop_sequence'] == $stop_sequence)
return $tripStop;
}
return Array();
}
+
/* DEPRECIATED
-function getTimeInterpolatedTrip($tripID, $range = "") {
- global $conn;
- $query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_lat,stop_lon,stop_name,stop_code,
- stop_sequence,service_id,trips.route_id,route_short_name,route_long_name
-FROM stop_times
-join trips on trips.trip_id = stop_times.trip_id
-join routes on trips.route_id = routes.route_id
-join stops on stops.stop_id = stop_times.stop_id
-WHERE trips.trip_id = :tripID $range ORDER BY stop_sequence";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":tripID", $tripID);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- $stopTimes = $query->fetchAll();
- $cur_timepoint = Array();
- $next_timepoint = Array();
- $distance_between_timepoints = 0.0;
- $distance_traveled_between_timepoints = 0.0;
- $rv = Array();
- foreach ($stopTimes as $i => $stopTime) {
- if ($stopTime['arrival_time'] != "") {
- // is timepoint
- $cur_timepoint = $stopTime;
- $distance_between_timepoints = 0.0;
- $distance_traveled_between_timepoints = 0.0;
- if ($i + 1 < sizeof($stopTimes)) {
- $k = $i + 1;
- $distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]);
- while ($stopTimes[$k]["arrival_time"] == "" && $k + 1 < sizeof($stopTimes)) {
- $k += 1;
- // echo "k".$k;
- $distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]);
- }
- $next_timepoint = $stopTimes[$k];
- }
- $rv[] = $stopTime;
- } else {
- // is untimed point
- // echo "i".$i;
- $distance_traveled_between_timepoints += distance($stopTimes[$i - 1]["stop_lat"], $stopTimes[$i - 1]["stop_lon"], $stopTimes[$i]["stop_lat"], $stopTimes[$i]["stop_lon"]);
- // echo "$distance_traveled_between_timepoints / $distance_between_timepoints<br>";
- $distance_percent = $distance_traveled_between_timepoints / $distance_between_timepoints;
- if ($next_timepoint["arrival_time"] != "") {
- $total_time = strtotime($next_timepoint["arrival_time"]) - strtotime($cur_timepoint["arrival_time"]);
- // echo strtotime($next_timepoint["arrival_time"])." - ".strtotime($cur_timepoint["arrival_time"])."<br>";
- $time_estimate = ($distance_percent * $total_time) + strtotime($cur_timepoint["arrival_time"]);
- $stopTime["arrival_time"] = date("H:i:s", $time_estimate);
- } else {
- $stopTime["arrival_time"] = $cur_timepoint["arrival_time"];
- }
- $rv[] = $stopTime;
- }
- }
- // var_dump($rv);
- return $rv;
-}
-
-function getTripPreviousTimePoint($tripID, $stop_sequence) {
- global $conn;
- $query = " SELECT trip_id,stop_id,
- stop_sequence
-FROM stop_times
-WHERE trip_id = :tripID and stop_sequence < :stop_sequence
-and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence DESC LIMIT 1";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":tripID", $tripID);
- $query->bindParam(":stop_sequence", $stop_sequence);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetch(PDO :: FETCH_ASSOC);
-}
-
-function getTripNextTimePoint($tripID, $stop_sequence) {
- global $conn;
- $query = " SELECT trip_id,stop_id,
- stop_sequence
-FROM stop_times
-WHERE trip_id = :tripID and stop_sequence > :stop_sequence
-and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence LIMIT 1";
- debug($query, "database");
- $query = $conn->prepare($query);
- $query->bindParam(":tripID", $tripID);
- $query->bindParam(":stop_sequence", $stop_sequence);
- $query->execute();
- if (!$query) {
- databaseError($conn->errorInfo());
- return Array();
- }
- return $query->fetch(PDO :: FETCH_ASSOC);
-}
-
-
-
-function getTimeInterpolatedTripAtStop($tripID, $stop_sequence) {
- global $conn;
- // limit interpolation to between nearest actual points.
- $prevTimePoint = getTripPreviousTimePoint($tripID, $stop_sequence);
- $nextTimePoint = getTripNextTimePoint($tripID, $stop_sequence);
- // echo " prev {$lowestDelta['stop_sequence']} next {$nextTimePoint['stop_sequence']} ";
- $range = "";
- if ($prevTimePoint != "")
- $range .= " AND stop_sequence >= '{$prevTimePoint['stop_sequence']}'";
- if ($nextTimePoint != "")
- $range .= " AND stop_sequence <= '{$nextTimePoint['stop_sequence']}'";
- foreach (getTimeInterpolatedTrip($tripID, $range) as $tripStop) {
- if ($tripStop['stop_sequence'] == $stop_sequence)
- return $tripStop;
- }
- return Array();
-}*/
+ function getTimeInterpolatedTrip($tripID, $range = "") {
+ global $conn;
+ $query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_lat,stop_lon,stop_name,stop_code,
+ stop_sequence,service_id,trips.route_id,route_short_name,route_long_name
+ FROM stop_times
+ join trips on trips.trip_id = stop_times.trip_id
+ join routes on trips.route_id = routes.route_id
+ join stops on stops.stop_id = stop_times.stop_id
+ WHERE trips.trip_id = :tripID $range ORDER BY stop_sequence";
+ debug($query, "database");
+ $query = $conn->prepare($query);
+ $query->bindParam(":tripID", $tripID);
+ $query->execute();
+ if (!$query) {
+ databaseError($conn->errorInfo());
+ return Array();
+ }
+ $stopTimes = $query->fetchAll();
+ $cur_timepoint = Array();
+ $next_timepoint = Array();
+ $distance_between_timepoints = 0.0;
+ $distance_traveled_between_timepoints = 0.0;
+ $rv = Array();
+ foreach ($stopTimes as $i => $stopTime) {
+ if ($stopTime['arrival_time'] != "") {
+ // is timepoint
+ $cur_timepoint = $stopTime;
+ $distance_between_timepoints = 0.0;
+ $distance_traveled_between_timepoints = 0.0;
+ if ($i + 1 < sizeof($stopTimes)) {
+ $k = $i + 1;
+ $distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]);
+ while ($stopTimes[$k]["arrival_time"] == "" && $k + 1 < sizeof($stopTimes)) {
+ $k += 1;
+ // echo "k".$k;
+ $distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]);
+ }
+ $next_timepoint = $stopTimes[$k];
+ }
+ $rv[] = $stopTime;
+ } else {
+ // is untimed point
+ // echo "i".$i;
+ $distance_traveled_between_timepoints += distance($stopTimes[$i - 1]["stop_lat"], $stopTimes[$i - 1]["stop_lon"], $stopTimes[$i]["stop_lat"], $stopTimes[$i]["stop_lon"]);
+ // echo "$distance_traveled_between_timepoints / $distance_between_timepoints<br>";
+ $distance_percent = $distance_traveled_between_timepoints / $distance_between_timepoints;
+ if ($next_timepoint["arrival_time"] != "") {
+ $total_time = strtotime($next_timepoint["arrival_time"]) - strtotime($cur_timepoint["arrival_time"]);
+ // echo strtotime($next_timepoint["arrival_time"])." - ".strtotime($cur_timepoint["arrival_time"])."<br>";
+ $time_estimate = ($distance_percent * $total_time) + strtotime($cur_timepoint["arrival_time"]);
+ $stopTime["arrival_time"] = date("H:i:s", $time_estimate);
+ } else {
+ $stopTime["arrival_time"] = $cur_timepoint["arrival_time"];
+ }
+ $rv[] = $stopTime;
+ }
+ }
+ // var_dump($rv);
+ return $rv;
+ }
+
+ function getTripPreviousTimePoint($tripID, $stop_sequence) {
+ global $conn;
+ $query = " SELECT trip_id,stop_id,
+ stop_sequence
+ FROM stop_times
+ WHERE trip_id = :tripID and stop_sequence < :stop_sequence
+ and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence DESC LIMIT 1";
+ debug($query, "database");
+ $query = $conn->prepare($query);
+ $query->bindParam(":tripID", $tripID);
+ $query->bindParam(":stop_sequence", $stop_sequence);
+ $query->execute();
+ if (!$query) {
+ databaseError($conn->errorInfo());
+ return Array();
+ }
+ return $query->fetch(PDO :: FETCH_ASSOC);
+ }
+
+ function getTripNextTimePoint($tripID, $stop_sequence) {
+ global $conn;
+ $query = " SELECT trip_id,stop_id,
+ stop_sequence
+ FROM stop_times
+ WHERE trip_id = :tripID and stop_sequence > :stop_sequence
+ and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence LIMIT 1";
+ debug($query, "database");
+ $query = $conn->prepare($query);
+ $query->bindParam(":tripID", $tripID);
+ $query->bindParam(":stop_sequence", $stop_sequence);
+ $query->execute();
+ if (!$query) {
+ databaseError($conn->errorInfo());
+ return Array();
+ }
+ return $query->fetch(PDO :: FETCH_ASSOC);
+ }
+
+
+
+ function getTimeInterpolatedTripAtStop($tripID, $stop_sequence) {
+ global $conn;
+ // limit interpolation to between nearest actual points.
+ $prevTimePoint = getTripPreviousTimePoint($tripID, $stop_sequence);
+ $nextTimePoint = getTripNextTimePoint($tripID, $stop_sequence);
+ // echo " prev {$lowestDelta['stop_sequence']} next {$nextTimePoint['stop_sequence']} ";
+ $range = "";
+ if ($prevTimePoint != "")
+ $range .= " AND stop_sequence >= '{$prevTimePoint['stop_sequence']}'";
+ if ($nextTimePoint != "")
+ $range .= " AND stop_sequence <= '{$nextTimePoint['stop_sequence']}'";
+ foreach (getTimeInterpolatedTrip($tripID, $range) as $tripStop) {
+ if ($tripStop['stop_sequence'] == $stop_sequence)
+ return $tripStop;
+ }
+ return Array();
+ } */
function getTripStartTime($tripID) {
global $conn;
@@ -259,7 +261,7 @@
$query = "SELECT stops.stop_id, stop_name, arrival_time
FROM stop_times join stops on stops.stop_id = stop_times.stop_id
WHERE stop_times.trip_id = :tripID
-" . ($stop_sequence != "" ? " AND stop_sequence > :stop_sequence " : "") ." ORDER BY stop_sequence";
+" . ($stop_sequence != "" ? " AND stop_sequence > :stop_sequence " : "") . " ORDER BY stop_sequence";
debug($query, "database");
$query = $conn->prepare($query);
if ($stop_sequence != "")
--- a/nbproject/project.properties
+++ b/nbproject/project.properties
@@ -1,5 +1,5 @@
include.path=${php.global.include.path}
-php.version=PHP_5
+php.version=PHP_53
source.encoding=UTF-8
src.dir=.
tags.asp=false
--- a/routeList.php
+++ b/routeList.php
@@ -71,7 +71,7 @@
foreach ($routes as $route) {
echo '<li><a href="trip.php?routeid=' . $route['route_id'] . '"><h3>' . $route['route_short_name'] . "</h3><p>" . $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")</p>";
if (isset($nearby)) {
- $time = getTimeInterpolatedRouteAtStop($route['route_id'], $route['stop_id']);
+ $time = getRouteAtStop($route['route_id'], $route['stop_id']);
echo '<span class="ui-li-count">' . ($time['arrival_time'] ? $time['arrival_time'] : "No more trips today") . "<br>" . floor($route['distance']) . 'm away</span>';
}
echo "</a></li>\n";
--- a/trip.php
+++ b/trip.php
@@ -66,7 +66,7 @@
echo "</div>";
echo ' <ul data-role="listview" data-inset="true">';
$stopsGrouped = Array();
-$tripStopTimes = getTimeInterpolatedTrip($tripid);
+$tripStopTimes = getTripStopTimes($tripid);
echo '<li data-role="list-divider">' . $tripStopTimes[0]['arrival_time'] . ' to ' . $tripStopTimes[sizeof($tripStopTimes) - 1]['arrival_time'] . ' ' . $trip['route_long_name'] . ' (' . ucwords($tripStopTimes[0]['service_id']) . ')</li>';
foreach ($tripStopTimes as $key => $tripStopTime) {
if ($key + 1 > sizeof($tripStopTimes) || ($tripStopTimes[$key]["stop_name"] != $tripStopTimes[$key + 1]["stop_name"])) {