<?php |
<?php |
|
|
|
/* |
|
* Copyright 2010,2011 Alexander Sadleir |
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); |
|
you may not use this file except in compliance with the License. |
|
You may obtain a copy of the License at |
|
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
Unless required by applicable law or agreed to in writing, software |
|
distributed under the License is distributed on an "AS IS" BASIS, |
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
See the License for the specific language governing permissions and |
|
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 INNER JOIN myway_routes |
ON myway_observations.myway_stop=myway_stops.myway_stop INNER JOIN myway_routes |
ON myway_observations.myway_route=myway_routes.myway_route |
ON myway_observations.myway_route=myway_routes.myway_route |
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_code"] == "") { |
if ($obsv["stop_code"] == "") { |
echo "error, stop '{$obsv['myway_stop']}' unknown"; |
echo "error, stop '{$obsv['myway_stop']}' unknown"; |
continue; |
continue; |
} |
} |
if ($obsv["route_full_name"] == "") { |
if ($obsv["route_full_name"] == "") { |
echo "error, route '{$obsv['myway_route']}' unknown"; |
echo "error, route '{$obsv['myway_route']}' 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 = getStopsByStopCode($obsv["stop_code"], $obsv["stop_street"]); |
$potentialStops = getStopsByStopCode($obsv["stop_code"], $obsv["stop_street"]); |
//: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 stopcode {$obsv["stop_code"]} street {$obsv["stop_street"]} unknown"; |
echo "error, potential stops for stopcode {$obsv["stop_code"]} street {$obsv["stop_street"]} unknown"; |
continue; |
continue; |
} |
} |
//print out stops |
//print out stops |
echo "Matched stops: "; |
echo "Matched stops: "; |
foreach ($potentialStops as $potentialStop) echo $potentialStop['stop_code'] . " "; |
foreach ($potentialStops as $potentialStop) |
echo "<br>"; |
echo $potentialStop['stop_code'] . " "; |
//:get myway_route record |
echo "<br>"; |
//no result, skip and display error |
//:get myway_route record |
//print out route |
//no result, skip and display error |
$potentialRoute = getRouteByFullName($obsv["route_full_name"]); |
//print out route |
if ($potentialRoute["route_short_name"] == "") { |
$potentialRoute = getRouteByFullName($obsv["route_full_name"]); |
echo "error, route '{$obsv["route_full_name"]}' unknown"; |
if ($potentialRoute["route_short_name"] == "") { |
continue; |
echo "error, route '{$obsv["route_full_name"]}' unknown"; |
} |
continue; |
echo "Matched route: {$potentialRoute['route_short_name']}{$potentialRoute['route_long_name']} {$timing_period}<br>"; |
} |
$timeDeltas = Array(); |
echo "Matched route: {$potentialRoute['route_short_name']}{$potentialRoute['route_long_name']} {$timing_period}<br>"; |
foreach ($potentialStops as $potentialStop) { |
$timeDeltas = Array(); |
$stopRoutes = getStopRoutes($potentialStop['stop_id'], $timing_period); |
foreach ($potentialStops as $potentialStop) { |
$foundRoute = Array(); |
$stopRoutes = getStopRoutes($potentialStop['stop_id'], $timing_period); |
foreach ($stopRoutes as $stopRoute) { |
$foundRoute = Array(); |
//Check if this route stops at each stop |
foreach ($stopRoutes as $stopRoute) { |
if ($stopRoute['route_short_name'] . $stopRoute['route_long_name'] == $obsv["route_full_name"]) { |
//Check if this route stops at each stop |
echo "Matching route {$stopRoute['route_id']} found at {$potentialStop['stop_code']}<br>"; |
if ($stopRoute['route_short_name'] . $stopRoute['route_long_name'] == $obsv["route_full_name"]) { |
$foundRoute = $stopRoute; |
echo "Matching route {$stopRoute['route_id']} found at {$potentialStop['stop_code']}<br>"; |
//if does get tripstoptimes for this route |
$foundRoute = $stopRoute; |
$trips = getStopTrips($potentialStop['stop_id'], $timing_period, $search_time); |
//if does get tripstoptimes for this route |
foreach ($trips as $trip) { |
$trips = getStopTrips($potentialStop['stop_id'], $timing_period, $search_time); |
//echo $trip['route_id']." ".$stopRoute['route_id'].";"; |
foreach ($trips as $trip) { |
if ($trip['route_id'] == $stopRoute['route_id']) { |
//echo $trip['route_id']." ".$stopRoute['route_id'].";"; |
$timedTrip = getTimeInterpolatedTripAtStop($trip['trip_id'], $trip['stop_sequence']); |
if ($trip['route_id'] == $stopRoute['route_id']) { |
$actual_time = strtotime($time); |
$timedTrip = getTimeInterpolatedTripAtStop($trip['trip_id'], $trip['stop_sequence']); |
$trip_time = strtotime($timedTrip['arrival_time']); |
$actual_time = strtotime($time); |
$timeDiff = $actual_time - $trip_time; |
$trip_time = strtotime($timedTrip['arrival_time']); |
//work out time delta, put into array with index of delta |
$timeDiff = $actual_time - $trip_time; |
$timeDeltas[] = Array( |
//work out time delta, put into array with index of delta |
"timeDiff" => $timeDiff, |
$timeDeltas[] = Array( |
"stop_code" => $potentialStop['stop_code'], |
"timeDiff" => $timeDiff, |
"stop_sequence" => $timedTrip['stop_sequence'] |
"stop_code" => $potentialStop['stop_code'], |
); |
"stop_sequence" => $timedTrip['stop_sequence'] |
echo "Found trip {$trip['trip_id']} at stop {$potentialStop['stop_code']} (#{$potentialStop['stop_id']}, sequence #{$trip['stop_sequence']})<br>"; |
); |
echo "Arriving at {$timedTrip['arrival_time']}, difference of " . round($timeDiff / 60, 2) . " minutes<br>"; |
echo "Found trip {$trip['trip_id']} at stop {$potentialStop['stop_code']} (#{$potentialStop['stop_id']}, sequence #{$trip['stop_sequence']})<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_code']}<br>"; |
echo "No matching routes found at {$potentialStop['stop_code']}<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) { |
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_full_name = $obsv['route_full_name']; |
$route_full_name = $obsv['route_full_name']; |
$stop_code = $timeDeltas[0]["stop_code"]; |
$stop_code = $timeDeltas[0]["stop_code"]; |
$stop_sequence = $timeDeltas[0]["stop_sequence"]; |
$stop_sequence = $timeDeltas[0]["stop_sequence"]; |
$stmt = $conn->prepare("insert into myway_timingdeltas (observation_id, route_full_name, stop_code, timing_delta, time, date, timing_period, stop_sequence) |
$stmt = $conn->prepare("insert into myway_timingdeltas (observation_id, route_full_name, stop_code, timing_delta, time, date, timing_period, stop_sequence) |
|
values (:observation_id, :route_full_name, :stop_code, :timing_delta, :time, :date, :timing_period, :stop_sequence)"); |
values (:observation_id, :route_full_name, :stop_code, :timing_delta, :time, :date, :timing_period, :stop_sequence)"); |
$stmt->bindParam(':observation_id', $observation_id); |
$stmt->bindParam(':observation_id', $observation_id); |
$stmt->bindParam(':route_full_name', $route_full_name); |
$stmt->bindParam(':route_full_name', $route_full_name); |
$stmt->bindParam(':stop_code', $stop_code); |
$stmt->bindParam(':stop_code', $stop_code); |
$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(); |
} |
} |
|
|