<?php |
<?php |
|
|
/* |
/* |
* Copyright 2010,2011 Alexander Sadleir |
* Copyright 2010,2011 Alexander Sadleir |
|
|
Licensed under the Apache License, Version 2.0 (the "License"); |
Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. |
you may not use this file except in compliance with the License. |
You may obtain a copy of the License at |
You may obtain a copy of the License at |
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
http://www.apache.org/licenses/LICENSE-2.0 |
|
|
Unless required by applicable law or agreed to in writing, software |
Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, |
distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and |
See the License for the specific language governing permissions and |
limitations under the License. |
limitations under the License. |
*/ |
*/ |
include ('../include/common.inc.php'); |
include ('../include/common.inc.php'); |
include_header("MyWay Delta Calculate", "mywayDeltaCalc"); |
include_header("MyWay Delta Calculate", "mywayDeltaCalc"); |
flush(); |
flush(); |
ob_flush(); |
ob_flush(); |
|
|
function abssort($a, $b) { |
function abssort($a, $b) { |
if ($a['timeDiff'] == $b['timeDiff']) { |
if ($a['timeDiff'] == $b['timeDiff']) { |
return 0; |
return 0; |
} |
} |
return (abs($a['timeDiff']) < abs($b['timeDiff'])) ? -1 : 1; |
return (abs($a['timeDiff']) < abs($b['timeDiff'])) ? -1 : 1; |
} |
} |
|
|
//collect all observation not in delta |
//collect all observation not in delta |
$query = "select * from myway_observations INNER JOIN myway_stops |
$query = "select * from myway_observations INNER JOIN myway_stops |
ON myway_observations.myway_stop=myway_stops.myway_stop |
ON myway_observations.myway_stop=myway_stops.myway_stop |
WHERE observation_id NOT IN |
WHERE observation_id NOT IN |
( |
( |
SELECT observation_id |
SELECT observation_id |
FROM myway_timingdeltas |
FROM myway_timingdeltas |
)"; |
)"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn->prepare($query); |
$query = $conn->prepare($query); |
$query->execute(); |
$query->execute(); |
if (!$query) { |
if (!$query) { |
databaseError($conn->errorInfo()); |
databaseError($conn->errorInfo()); |
return Array(); |
return Array(); |
} |
} |
$uncalcdObservations = $query->fetchAll(); |
$uncalcdObservations = $query->fetchAll(); |
//Display count |
//Display count |
echo "<h3>" . sizeof($uncalcdObservations) . " observations not yet processed</h2>"; |
echo "<h3>" . sizeof($uncalcdObservations) . " observations not yet processed</h2>"; |
//foreach observation not in delta |
//foreach observation not in delta |
foreach ($uncalcdObservations as $obsv) { |
foreach ($uncalcdObservations as $obsv) { |
//var_dump($obsv); |
//var_dump($obsv); |
echo "<h3>Observation {$obsv['observation_id']}:</h1> |
echo "<h3>Observation {$obsv['observation_id']}:</h1> |
<small>{$obsv['myway_stop']} @ {$obsv['time']} on {$obsv['myway_route']}</small><br>"; |
<small>{$obsv['myway_stop']} @ {$obsv['time']} on {$obsv['myway_route']}</small><br>"; |
if ($obsv["stop_id"] == "") { |
if ($obsv["stop_id"] == "") { |
echo "error, stop '{$obsv['myway_stop']}' unknown"; |
echo "error, stop '{$obsv['myway_stop']}' unknown"; |
continue; |
continue; |
} |
} |
// convert timestamp into time of day and date |
// convert timestamp into time of day and date |
// timezones from http://www.postgresql.org/docs/8.0/static/datetime-keywords.html |
// timezones from http://www.postgresql.org/docs/8.0/static/datetime-keywords.html |
$time = date("H:i:s", strtotime($obsv['time'])); |
$time = date("H:i:s", strtotime($obsv['time'])); |
$time_tz = date("H:i:s", strtotime($obsv['time'])) . " AESST"; |
$time_tz = date("H:i:s", strtotime($obsv['time'])) . " AESST"; |
$search_time = date("H:i:s", strtotime($obsv['time']) - (30 * 60)); // 30 minutes margin |
$search_time = date("H:i:s", strtotime($obsv['time']) - (30 * 60)); // 30 minutes margin |
$date = date("c", strtotime($obsv['time'])); |
$date = date("c", strtotime($obsv['time'])); |
$timing_period = service_period(strtotime($date)); |
$timing_period = service_period(strtotime($date)); |
$potentialStops = Array(getStop($obsv["stop_id"])); |
$potentialStops = Array(getStop($obsv["stop_id"])); |
//:get myway_stops records |
//:get myway_stops records |
//:search by starts with stopcode and starts with street if street is not null |
//:search by starts with stopcode and starts with street if street is not null |
//no result, skip and display error |
//no result, skip and display error |
if (sizeof($potentialStops) < 1) { |
if (sizeof($potentialStops) < 1) { |
echo "error, potential stops for stopid {$obsv["stop_id"]} unknown"; |
echo "error, potential stops for stopid {$obsv["stop_id"]} unknown"; |
continue; |
continue; |
} |
} |
//print out stops |
//print out stops |
echo "Matched stops: "; |
echo "Matched stops: "; |
foreach ($potentialStops as $potentialStop) { |
foreach ($potentialStops as $potentialStop) { |
echo $potentialStop['stop_id'] . " " . $potentialStop['stop_name'] . " "; |
echo $potentialStop['stop_id'] . " " . $potentialStop['stop_name'] . " "; |
} |
} |
echo "<br>"; |
echo "<br>"; |
//:get myway_route record |
//:get myway_route record |
//no result, skip and display error |
//no result, skip and display error |
//print out route |
//print out route |
$potentialRoutes = getRoutesByShortName(preg_replace("/[A-Z]/", "", $obsv["myway_route"])); |
$potentialRoutes = getRoutesByShortName(preg_replace("/[A-Z]/", "", $obsv["myway_route"])); |
if (sizeof($potentialRoutes) < 1) { |
if (sizeof($potentialRoutes) < 1) { |
echo "error, route '{$obsv["myway_route"]}' unknown"; |
echo "error, route '{$obsv["myway_route"]}' unknown"; |
continue; |
continue; |
} |
} |
$timeDeltas = Array(); |
$timeDeltas = Array(); |
foreach ($potentialRoutes as $potentialRoute) { |
foreach ($potentialRoutes as $potentialRoute) { |
echo "Matched route: {$potentialRoute['route_id']} {$potentialRoute['route_short_name']}{$potentialRoute['route_long_name']} {$timing_period}<br>"; |
echo "Matched route: {$potentialRoute['route_id']} {$potentialRoute['route_short_name']}{$potentialRoute['route_long_name']} {$timing_period}<br>"; |
foreach ($potentialStops as $potentialStop) { |
foreach ($potentialStops as $potentialStop) { |
$stopRoutes = getStopRoutes($potentialStop['stop_id'], $timing_period); |
$stopRoutes = getStopRoutes($potentialStop['stop_id'], $timing_period); |
$foundRoute = Array(); |
$foundRoute = Array(); |
foreach ($stopRoutes as $stopRoute) { |
foreach ($stopRoutes as $stopRoute) { |
//Check if this route stops at each stop |
//Check if this route stops at each stop |
if ($stopRoute['route_id'] == $potentialRoute['route_id']) { |
if ($stopRoute['route_id'] == $potentialRoute['route_id']) { |
echo "Matching route {$stopRoute['route_id']} found at stop #{$potentialStop['stop_id']}<br>"; |
echo "Matching route {$stopRoute['route_id']} found at stop #{$potentialStop['stop_id']}<br>"; |
$foundRoute = $stopRoute; |
$foundRoute = $stopRoute; |
//if does get tripstoptimes for this route |
//if does get tripstoptimes for this route |
$trips = getStopTrips($potentialStop['stop_id'], $timing_period, $search_time); |
$trips = getStopTrips($potentialStop['stop_id'], $timing_period, $search_time); |
foreach ($trips as $trip) { |
foreach ($trips as $trip) { |
//echo $trip['route_id']." ".$stopRoute['route_id'].";"; |
//echo $trip['route_id']." ".$stopRoute['route_id'].";"; |
if ($trip['route_id'] == $stopRoute['route_id']) { |
if ($trip['route_id'] == $stopRoute['route_id']) { |
$timedTrip = getTripAtStop($trip['trip_id'], $trip['stop_sequence']); |
$timedTrip = getTripAtStop($trip['trip_id'], $trip['stop_sequence']); |
$actual_time = strtotime($time); |
$actual_time = strtotime($time); |
$trip_time = strtotime($timedTrip['arrival_time']); |
$trip_time = strtotime($timedTrip['arrival_time']); |
$timeDiff = $actual_time - $trip_time; |
$timeDiff = $actual_time - $trip_time; |
//work out time delta, put into array with index of delta |
//work out time delta, put into array with index of delta |
$timeDeltas[] = Array( |
$timeDeltas[] = Array( |
"timeDiff" => $timeDiff, |
"timeDiff" => $timeDiff, |
"stop_id" => $potentialStop['stop_id'], |
"stop_id" => $potentialStop['stop_id'], |
"stop_sequence" => $trip['stop_sequence'], |
"stop_sequence" => $trip['stop_sequence'], |
|
"route_name" => "{$potentialRoute['route_short_name']} {$potentialRoute['route_long_name']}", |
"route_id" => $trip['route_id'] |
"route_id" => $trip['route_id'] |
); |
); |
echo "Found trip {$trip['trip_id']} at stop {$potentialStop['stop_id']} (#{$potentialStop['stop_name']}, sequence #{$trip['stop_sequence']})<br>"; |
echo "Found trip {$trip['trip_id']} at stop {$potentialStop['stop_id']} (#{$potentialStop['stop_name']}, sequence #{$trip['stop_sequence']})<br>"; |
echo "Arriving at {$timedTrip['arrival_time']}, difference of " . round($timeDiff / 60, 2) . " minutes<br>"; |
echo "Arriving at {$timedTrip['arrival_time']}, difference of " . round($timeDiff / 60, 2) . " minutes<br>"; |
} |
} |
} |
} |
break; // because have found route |
break; // because have found route |
} |
} |
} |
} |
if (sizeof($foundRoute) < 1) { |
if (sizeof($foundRoute) < 1) { |
//print out that stops/does not stop |
//print out that stops/does not stop |
echo "No matching routes found at {$potentialStop['stop_id']}<br>"; |
echo "No matching routes found at {$potentialStop['stop_id']}<br>"; |
//var_dump($stopRoutes); |
//var_dump($stopRoutes); |
flush(); |
flush(); |
} |
} |
} |
} |
} |
} |
|
|
// lowest delta is recorded delta |
// lowest delta is recorded delta |
usort($timeDeltas, "abssort"); |
usort($timeDeltas, "abssort"); |
$lowestDelta = $timeDeltas[0]["timeDiff"]; |
$lowestDelta = $timeDeltas[0]["timeDiff"]; |
if (sizeof($timeDeltas) != 0) { |
if (sizeof($timeDeltas) != 0) { |
|
if (abs($lowestDelta) > 9999) { |
|
echo "Difference of " . round($lowestDelta / 60, 2) . " minutes is too high. Will not record this observation<br>"; |
|
} else { |
echo "Lowest difference of " . round($lowestDelta / 60, 2) . " minutes will be recorded for this observation<br>"; |
echo "Lowest difference of " . round($lowestDelta / 60, 2) . " minutes will be recorded for this observation<br>"; |
|
|
$observation_id = $obsv['observation_id']; |
$observation_id = $obsv['observation_id']; |
|
|
|
$route_name = $timeDeltas[0]["route_name"]; |
$route_id = $timeDeltas[0]["route_id"]; |
$route_id = $timeDeltas[0]["route_id"]; |
$stop_id = $timeDeltas[0]["stop_id"]; |
$stop_id = $timeDeltas[0]["stop_id"]; |
|
$myway_stop = $obsv["myway_stop"]; |
$stop_sequence = $timeDeltas[0]["stop_sequence"]; |
$stop_sequence = $timeDeltas[0]["stop_sequence"]; |
$stmt = $conn->prepare("insert into myway_timingdeltas (observation_id, route_id, stop_id, timing_delta, time, date, timing_period, stop_sequence) |
$stmt = $conn->prepare("insert into myway_timingdeltas (observation_id, route_id, stop_id, timing_delta, time, date, timing_period, stop_sequence,myway_stop,route_name) |
values (:observation_id, :route_id, :stop_id, :timing_delta, :time, :date, :timing_period, :stop_sequence)"); |
values (:observation_id, :route_id, :stop_id, :timing_delta, :time, :date, :timing_period, :stop_sequence,:myway_stop,:route_name)"); |
$stmt->bindParam(':observation_id', $observation_id); |
$stmt->bindParam(':observation_id', $observation_id); |
$stmt->bindParam(':route_id', $route_id); |
$stmt->bindParam(':route_id', $route_id); |
|
$stmt->bindParam(':route_name', $route_name); |
$stmt->bindParam(':stop_id', $stop_id); |
$stmt->bindParam(':stop_id', $stop_id); |
|
$stmt->bindParam(':myway_stop', $myway_stop); |
$stmt->bindParam(':timing_delta', $lowestDelta); |
$stmt->bindParam(':timing_delta', $lowestDelta); |
$stmt->bindParam(':time', $time_tz); |
$stmt->bindParam(':time', $time_tz); |
$stmt->bindParam(':date', $date); |
$stmt->bindParam(':date', $date); |
$stmt->bindParam(':timing_period', $timing_period); |
$stmt->bindParam(':timing_period', $timing_period); |
$stmt->bindParam(':stop_sequence', $stop_sequence); |
$stmt->bindParam(':stop_sequence', $stop_sequence); |
// insert a record |
// insert a record |
$stmt->execute(); |
$stmt->execute(); |
if ($stmt->rowCount() > 0) { |
if ($stmt->rowCount() > 0) { |
echo "Recorded.<br>"; |
echo "Recorded.<br>"; |
} |
} |
var_dump($conn->errorInfo()); |
var_dump($conn->errorInfo()); |
flush(); |
flush(); |
|
} |
} |
} |
flush(); |
flush(); |
} |
} |
|
|