<?php |
<?php |
function getTrip($tripID) |
|
|
/* |
{ |
* Copyright 2010,2011 Alexander Sadleir |
global $conn; |
|
$query = "Select * from trips |
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. |
|
*/ |
|
|
|
function getTrip($tripID) { |
|
global $conn; |
|
$query = "Select * from trips |
join routes on trips.route_id = routes.route_id |
join routes on trips.route_id = routes.route_id |
where trip_id = :tripID |
where trip_id = :tripID |
LIMIT 1"; |
LIMIT 1"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn -> prepare($query); |
$query = $conn->prepare($query); |
$query -> bindParam(":tripID", $tripID); |
$query->bindParam(":tripID", $tripID); |
$query -> execute(); |
$query->execute(); |
if (!$query) { |
if (!$query) { |
databaseError($conn -> errorInfo()); |
databaseError($conn->errorInfo()); |
return Array(); |
return Array(); |
} |
} |
return $query -> fetch(PDO :: FETCH_ASSOC); |
return $query->fetch(PDO :: FETCH_ASSOC); |
} |
} |
function getTripShape($tripID) |
|
|
function getTripShape($tripID) { |
{ |
global $conn; |
global $conn; |
$query = "SELECT ST_AsKML(ST_MakeLine(geometry(a.position))) as the_route |
$query = "SELECT ST_AsKML(ST_MakeLine(geometry(a.position))) as the_route |
|
FROM (SELECT position, |
FROM (SELECT position, |
stop_sequence, trips.trip_id |
stop_sequence, trips.trip_id |
FROM stop_times |
FROM stop_times |
join trips on trips.trip_id = stop_times.trip_id |
join trips on trips.trip_id = stop_times.trip_id |
join stops on stops.stop_id = stop_times.stop_id |
join stops on stops.stop_id = stop_times.stop_id |
WHERE trips.trip_id = :tripID ORDER BY stop_sequence) as a group by a.trip_id"; |
WHERE trips.trip_id = :tripID ORDER BY stop_sequence) as a group by a.trip_id"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn -> prepare($query); |
$query = $conn->prepare($query); |
$query -> bindParam(":tripID", $tripID); |
$query->bindParam(":tripID", $tripID); |
$query -> execute(); |
$query->execute(); |
if (!$query) { |
if (!$query) { |
databaseError($conn -> errorInfo()); |
databaseError($conn->errorInfo()); |
return Array(); |
return Array(); |
} |
} |
return $query -> fetchColumn(0); |
return $query->fetchColumn(0); |
} |
} |
function getTimeInterpolatedTrip($tripID, $range = "") |
|
|
function getTimeInterpolatedTrip($tripID, $range = "") { |
{ |
global $conn; |
global $conn; |
$query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_lat,stop_lon,stop_name,stop_code, |
$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 |
stop_sequence,service_id,trips.route_id,route_short_name,route_long_name |
FROM stop_times |
FROM stop_times |
join trips on trips.trip_id = stop_times.trip_id |
join trips on trips.trip_id = stop_times.trip_id |
join routes on trips.route_id = routes.route_id |
join routes on trips.route_id = routes.route_id |
join stops on stops.stop_id = stop_times.stop_id |
join stops on stops.stop_id = stop_times.stop_id |
WHERE trips.trip_id = :tripID $range ORDER BY stop_sequence"; |
WHERE trips.trip_id = :tripID $range ORDER BY stop_sequence"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn -> prepare($query); |
$query = $conn->prepare($query); |
$query -> bindParam(":tripID", $tripID); |
$query->bindParam(":tripID", $tripID); |
$query -> execute(); |
$query->execute(); |
if (!$query) { |
if (!$query) { |
databaseError($conn -> errorInfo()); |
databaseError($conn->errorInfo()); |
return Array(); |
return Array(); |
} |
} |
$stopTimes = $query -> fetchAll(); |
$stopTimes = $query->fetchAll(); |
$cur_timepoint = Array(); |
$cur_timepoint = Array(); |
$next_timepoint = Array(); |
$next_timepoint = Array(); |
$distance_between_timepoints = 0.0; |
$distance_between_timepoints = 0.0; |
$distance_traveled_between_timepoints = 0.0; |
$distance_traveled_between_timepoints = 0.0; |
$rv = Array(); |
$rv = Array(); |
foreach ($stopTimes as $i => $stopTime) { |
foreach ($stopTimes as $i => $stopTime) { |
if ($stopTime['arrival_time'] != "") { |
if ($stopTime['arrival_time'] != "") { |
// is timepoint |
// is timepoint |
$cur_timepoint = $stopTime; |
$cur_timepoint = $stopTime; |
$distance_between_timepoints = 0.0; |
$distance_between_timepoints = 0.0; |
$distance_traveled_between_timepoints = 0.0; |
$distance_traveled_between_timepoints = 0.0; |
if ($i + 1 < sizeof($stopTimes)) { |
if ($i + 1 < sizeof($stopTimes)) { |
$k = $i + 1; |
$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"]); |
$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)) { |
while ($stopTimes[$k]["arrival_time"] == "" && $k + 1 < sizeof($stopTimes)) { |
$k += 1; |
$k += 1; |
// echo "k".$k; |
// 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"]); |
$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]; |
$next_timepoint = $stopTimes[$k]; |
|
} |
} |
|
$rv[] = $stopTime; |
$rv[] = $stopTime; |
} |
} else { |
else { |
|
// is untimed point |
// is untimed point |
// echo "i".$i; |
// 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"]); |
$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>"; |
// echo "$distance_traveled_between_timepoints / $distance_between_timepoints<br>"; |
$distance_percent = $distance_traveled_between_timepoints / $distance_between_timepoints; |
$distance_percent = $distance_traveled_between_timepoints / $distance_between_timepoints; |
if ($next_timepoint["arrival_time"] != "") { |
if ($next_timepoint["arrival_time"] != "") { |
$total_time = strtotime($next_timepoint["arrival_time"]) - strtotime($cur_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>"; |
// echo strtotime($next_timepoint["arrival_time"])." - ".strtotime($cur_timepoint["arrival_time"])."<br>"; |
$time_estimate = ($distance_percent * $total_time) + strtotime($cur_timepoint["arrival_time"]); |
$time_estimate = ($distance_percent * $total_time) + strtotime($cur_timepoint["arrival_time"]); |
$stopTime["arrival_time"] = date("H:i:s", $time_estimate); |
$stopTime["arrival_time"] = date("H:i:s", $time_estimate); |
} |
} else { |
else { |
|
$stopTime["arrival_time"] = $cur_timepoint["arrival_time"]; |
$stopTime["arrival_time"] = $cur_timepoint["arrival_time"]; |
} |
} |
$rv[] = $stopTime; |
$rv[] = $stopTime; |
|
} |
|
} |
} |
|
} |
|
// var_dump($rv); |
// var_dump($rv); |
return $rv; |
return $rv; |
} |
} |
function getTripPreviousTimePoint($tripID, $stop_sequence) |
|
|
function getTripPreviousTimePoint($tripID, $stop_sequence) { |
{ |
global $conn; |
global $conn; |
$query = " SELECT trip_id,stop_id, |
$query = " SELECT trip_id,stop_id, |
|
stop_sequence |
stop_sequence |
FROM stop_times |
FROM stop_times |
WHERE trip_id = :tripID and stop_sequence < :stop_sequence |
WHERE trip_id = :tripID and stop_sequence < :stop_sequence |
and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence DESC LIMIT 1"; |
and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence DESC LIMIT 1"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn -> prepare($query); |
$query = $conn->prepare($query); |
$query -> bindParam(":tripID", $tripID); |
$query->bindParam(":tripID", $tripID); |
$query -> bindParam(":stop_sequence", $stop_sequence); |
$query->bindParam(":stop_sequence", $stop_sequence); |
$query -> execute(); |
$query->execute(); |
if (!$query) { |
if (!$query) { |
databaseError($conn -> errorInfo()); |
databaseError($conn->errorInfo()); |
return Array(); |
return Array(); |
} |
} |
return $query -> fetch(PDO :: FETCH_ASSOC); |
return $query->fetch(PDO :: FETCH_ASSOC); |
} |
} |
function getTripNextTimePoint($tripID, $stop_sequence) |
|
|
function getTripNextTimePoint($tripID, $stop_sequence) { |
{ |
global $conn; |
global $conn; |
$query = " SELECT trip_id,stop_id, |
$query = " SELECT trip_id,stop_id, |
|
stop_sequence |
stop_sequence |
FROM stop_times |
FROM stop_times |
WHERE trip_id = :tripID and stop_sequence > :stop_sequence |
WHERE trip_id = :tripID and stop_sequence > :stop_sequence |
and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence LIMIT 1"; |
and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence LIMIT 1"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn -> prepare($query); |
$query = $conn->prepare($query); |
$query -> bindParam(":tripID", $tripID); |
$query->bindParam(":tripID", $tripID); |
$query -> bindParam(":stop_sequence", $stop_sequence); |
$query->bindParam(":stop_sequence", $stop_sequence); |
$query -> execute(); |
$query->execute(); |
if (!$query) { |
if (!$query) { |
databaseError($conn -> errorInfo()); |
databaseError($conn->errorInfo()); |
return Array(); |
return Array(); |
} |
} |
return $query -> fetch(PDO :: FETCH_ASSOC); |
return $query->fetch(PDO :: FETCH_ASSOC); |
} |
} |
function getTimeInterpolatedTripAtStop($tripID, $stop_sequence) |
|
|
function getTimeInterpolatedTripAtStop($tripID, $stop_sequence) { |
{ |
global $conn; |
global $conn; |
// limit interpolation to between nearest actual points. |
// limit interpolation to between nearest actual points. |
|
$prevTimePoint = getTripPreviousTimePoint($tripID, $stop_sequence); |
$prevTimePoint = getTripPreviousTimePoint($tripID, $stop_sequence); |
$nextTimePoint = getTripNextTimePoint($tripID, $stop_sequence); |
$nextTimePoint = getTripNextTimePoint($tripID, $stop_sequence); |
// echo " prev {$lowestDelta['stop_sequence']} next {$nextTimePoint['stop_sequence']} "; |
// echo " prev {$lowestDelta['stop_sequence']} next {$nextTimePoint['stop_sequence']} "; |
$range = ""; |
$range = ""; |
if ($prevTimePoint != "") $range .= " AND stop_sequence >= '{$prevTimePoint['stop_sequence']}'"; |
if ($prevTimePoint != "") |
if ($nextTimePoint != "") $range .= " AND stop_sequence <= '{$nextTimePoint['stop_sequence']}'"; |
$range .= " AND stop_sequence >= '{$prevTimePoint['stop_sequence']}'"; |
foreach (getTimeInterpolatedTrip($tripID, $range) as $tripStop) { |
if ($nextTimePoint != "") |
if ($tripStop['stop_sequence'] == $stop_sequence) return $tripStop; |
$range .= " AND stop_sequence <= '{$nextTimePoint['stop_sequence']}'"; |
} |
foreach (getTimeInterpolatedTrip($tripID, $range) as $tripStop) { |
|
if ($tripStop['stop_sequence'] == $stop_sequence) |
|
return $tripStop; |
|
} |
return Array(); |
return Array(); |
} |
} |
function getTripStartTime($tripID) |
|
|
function getTripStartTime($tripID) { |
{ |
global $conn; |
global $conn; |
$query = "Select * from stop_times |
$query = "Select * from stop_times |
|
where trip_id = :tripID |
where trip_id = :tripID |
AND arrival_time IS NOT NULL |
AND arrival_time IS NOT NULL |
AND stop_sequence = '1'"; |
AND stop_sequence = '1'"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn -> prepare($query); |
$query = $conn->prepare($query); |
$query -> bindParam(":tripID", $tripID); |
$query->bindParam(":tripID", $tripID); |
$query -> execute(); |
$query->execute(); |
if (!$query) { |
if (!$query) { |
databaseError($conn -> errorInfo()); |
databaseError($conn->errorInfo()); |
return Array(); |
return Array(); |
} |
} |
$r = $query -> fetch(PDO :: FETCH_ASSOC); |
$r = $query->fetch(PDO :: FETCH_ASSOC); |
return $r['arrival_time']; |
return $r['arrival_time']; |
} |
} |
function getTripEndTime($tripID) |
|
|
function getTripEndTime($tripID) { |
{ |
global $conn; |
global $conn; |
$query = "SELECT trip_id,max(arrival_time) as arrival_time from stop_times |
$query = "SELECT trip_id,max(arrival_time) as arrival_time from stop_times |
|
WHERE stop_times.arrival_time IS NOT NULL and trip_id = :tripID group by trip_id"; |
WHERE stop_times.arrival_time IS NOT NULL and trip_id = :tripID group by trip_id"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn -> prepare($query); |
$query = $conn->prepare($query); |
$query -> bindParam(":tripID", $tripID); |
$query->bindParam(":tripID", $tripID); |
$query -> execute(); |
$query->execute(); |
if (!$query) { |
if (!$query) { |
databaseError($conn -> errorInfo()); |
databaseError($conn->errorInfo()); |
return Array(); |
return Array(); |
} |
} |
$r = $query -> fetch(PDO :: FETCH_ASSOC); |
$r = $query->fetch(PDO :: FETCH_ASSOC); |
return $r['arrival_time']; |
return $r['arrival_time']; |
} |
} |
function getActiveTrips($time) |
|
|
function getActiveTrips($time) { |
{ |
global $conn; |
global $conn; |
if ($time == "") |
if ($time == "") $time = current_time(); |
$time = current_time(); |
$query = "Select distinct stop_times.trip_id, start_times.arrival_time as start_time, end_times.arrival_time as end_time from stop_times, (SELECT trip_id,arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL |
$query = "Select distinct stop_times.trip_id, start_times.arrival_time as start_time, end_times.arrival_time as end_time from stop_times, (SELECT trip_id,arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL |
AND stop_sequence = '1') as start_times, (SELECT trip_id,max(arrival_time) as arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times |
AND stop_sequence = '1') as start_times, (SELECT trip_id,max(arrival_time) as arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times |
WHERE start_times.trip_id = end_times.trip_id AND stop_times.trip_id = end_times.trip_id AND :time > start_times.arrival_time AND :time < end_times.arrival_time"; |
WHERE start_times.trip_id = end_times.trip_id AND stop_times.trip_id = end_times.trip_id AND :time > start_times.arrival_time AND :time < end_times.arrival_time"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn -> prepare($query); |
$query = $conn->prepare($query); |
$query -> bindParam(":time", $time); |
$query->bindParam(":time", $time); |
$query -> execute(); |
$query->execute(); |
if (!$query) { |
if (!$query) { |
databaseError($conn -> errorInfo()); |
databaseError($conn->errorInfo()); |
return Array(); |
return Array(); |
} |
} |
return $query -> fetchAll(); |
return $query->fetchAll(); |
} |
} |
function viaPoints($tripID, $stop_sequence = "") |
|
|
function viaPoints($tripID, $stop_sequence = "") { |
{ |
global $conn; |
global $conn; |
$query = "SELECT stops.stop_id, stop_name, arrival_time |
$query = "SELECT stops.stop_id, stop_name, arrival_time |
|
FROM stop_times join stops on stops.stop_id = stop_times.stop_id |
FROM stop_times join stops on stops.stop_id = stop_times.stop_id |
WHERE stop_times.trip_id = :tripID |
WHERE stop_times.trip_id = :tripID |
" . ($stop_sequence != "" ? " AND stop_sequence > :stop_sequence " : "") . "AND substr(stop_code,1,2) != 'Wj' ORDER BY stop_sequence"; |
" . ($stop_sequence != "" ? " AND stop_sequence > :stop_sequence " : "") ." ORDER BY stop_sequence"; |
debug($query, "database"); |
debug($query, "database"); |
$query = $conn -> prepare($query); |
$query = $conn->prepare($query); |
if ($stop_sequence != "") $query -> bindParam(":stop_sequence", $stop_sequence); |
if ($stop_sequence != "") |
$query -> bindParam(":tripID", $tripID); |
$query->bindParam(":stop_sequence", $stop_sequence); |
$query -> execute(); |
$query->bindParam(":tripID", $tripID); |
if (!$query) { |
$query->execute(); |
databaseError($conn -> errorInfo()); |
if (!$query) { |
return Array(); |
databaseError($conn->errorInfo()); |
} |
return Array(); |
return $query -> fetchAll(); |
} |
} |
return $query->fetchAll(); |
function viaPointNames($tripid, $stop_sequence = "") |
} |
|
|
{ |
function viaPointNames($tripid, $stop_sequence = "") { |
$viaPointNames = Array(); |
$viaPointNames = Array(); |
foreach (viaPoints($tripid, $stop_sequence) as $point) { |
foreach (viaPoints($tripid, $stop_sequence) as $point) { |
$viaPointNames[] = $point['stop_name']; |
$viaPointNames[] = $point['stop_name']; |
} |
} |
if (sizeof($viaPointNames) > 0) { |
if (sizeof($viaPointNames) > 0) { |
return r_implode(", ", $viaPointNames); |
return r_implode(", ", $viaPointNames); |
} |
} else { |
else { |
|
return ""; |
return ""; |
} |
} |
} |
} |
|
|
?> |
?> |