<?php |
<?php |
function getTrip($tripID) { |
function getTrip($tripID) { |
/* def handle_json_GET_triprows(self, params): |
global $conn; |
"""Return a list of rows from the feed file that are related to this |
$query = "Select * from trips where trip_id = '$tripID' join routes on trips.route_id = routes.route_id LIMIT 1"; |
trip.""" |
debug($query,"database"); |
schedule = self.server.schedule |
$result = pg_query($conn, $query); |
try: |
if (!$result) { |
trip = schedule.GetTrip(params.get('trip', None)) |
databaseError(pg_result_error($result)); |
except KeyError: |
return Array(); |
# if a non-existent trip is searched for, the return nothing |
} |
return |
return pg_fetch_assoc($result); |
route = schedule.GetRoute(trip.route_id) |
} |
trip_row = dict(trip.iteritems()) |
|
route_row = dict(route.iteritems()) |
|
return [['trips.txt', trip_row], ['routes.txt', route_row]] |
|
*/ |
|
} |
|
function getTripShape() { |
function getTripShape() { |
/* def handle_json_GET_tripstoptimes(self, params): |
/* def handle_json_GET_tripstoptimes(self, params): |
schedule = self.server.schedule |
schedule = self.server.schedule |
try: |
try: |
trip = schedule.GetTrip(params.get('trip')) |
trip = schedule.GetTrip(params.get('trip')) |
except KeyError: |
except KeyError: |
# if a non-existent trip is searched for, the return nothing |
# if a non-existent trip is searched for, the return nothing |
return |
return |
time_stops = trip.GetTimeInterpolatedStops() |
time_stops = trip.GetTimeInterpolatedStops() |
stops = [] |
stops = [] |
times = [] |
times = [] |
for arr,ts,is_timingpoint in time_stops: |
for arr,ts,is_timingpoint in time_stops: |
stops.append(StopToTuple(ts.stop)) |
stops.append(StopToTuple(ts.stop)) |
times.append(arr) |
times.append(arr) |
return [stops, times] |
return [stops, times] |
|
|
def handle_json_GET_tripshape(self, params): |
def handle_json_GET_tripshape(self, params): |
schedule = self.server.schedule |
schedule = self.server.schedule |
try: |
try: |
trip = schedule.GetTrip(params.get('trip')) |
trip = schedule.GetTrip(params.get('trip')) |
except KeyError: |
except KeyError: |
# if a non-existent trip is searched for, the return nothing |
# if a non-existent trip is searched for, the return nothing |
return |
return |
points = [] |
points = [] |
if trip.shape_id: |
if trip.shape_id: |
shape = schedule.GetShape(trip.shape_id) |
shape = schedule.GetShape(trip.shape_id) |
for (lat, lon, dist) in shape.points: |
for (lat, lon, dist) in shape.points: |
points.append((lat, lon)) |
points.append((lat, lon)) |
else: |
else: |
time_stops = trip.GetTimeStops() |
time_stops = trip.GetTimeStops() |
for arr,dep,stop in time_stops: |
for arr,dep,stop in time_stops: |
points.append((stop.stop_lat, stop.stop_lon)) |
points.append((stop.stop_lat, stop.stop_lon)) |
return points*/ |
return points*/ |
} |
} |
function tripStopTimes($tripID, $after_time, $limit) { |
function getTimeInterpolatedTrip($tripID) { |
/* rv = [] |
/* rv = [] |
|
|
stoptimes = self.GetStopTimes() |
stoptimes = self.GetStopTimes() |
# If there are no stoptimes [] is the correct return value but if the start |
# If there are no stoptimes [] is the correct return value but if the start |
# or end are missing times there is no correct return value. |
# or end are missing times there is no correct return value. |
if not stoptimes: |
if not stoptimes: |
return [] |
return [] |
if (stoptimes[0].GetTimeSecs() is None or |
if (stoptimes[0].GetTimeSecs() is None or |
stoptimes[-1].GetTimeSecs() is None): |
stoptimes[-1].GetTimeSecs() is None): |
raise ValueError("%s must have time at first and last stop" % (self)) |
raise ValueError("%s must have time at first and last stop" % (self)) |
|
|
cur_timepoint = None |
cur_timepoint = None |
next_timepoint = None |
next_timepoint = None |
distance_between_timepoints = 0 |
distance_between_timepoints = 0 |
distance_traveled_between_timepoints = 0 |
distance_traveled_between_timepoints = 0 |
|
|
for i, st in enumerate(stoptimes): |
for i, st in enumerate(stoptimes): |
if st.GetTimeSecs() != None: |
if st.GetTimeSecs() != None: |
cur_timepoint = st |
cur_timepoint = st |
distance_between_timepoints = 0 |
distance_between_timepoints = 0 |
distance_traveled_between_timepoints = 0 |
distance_traveled_between_timepoints = 0 |
if i + 1 < len(stoptimes): |
if i + 1 < len(stoptimes): |
k = i + 1 |
k = i + 1 |
distance_between_timepoints += util.ApproximateDistanceBetweenStops(stoptimes[k-1].stop, stoptimes[k].stop) |
distance_between_timepoints += util.ApproximateDistanceBetweenStops(stoptimes[k-1].stop, stoptimes[k].stop) |
while stoptimes[k].GetTimeSecs() == None: |
while stoptimes[k].GetTimeSecs() == None: |
k += 1 |
k += 1 |
distance_between_timepoints += util.ApproximateDistanceBetweenStops(stoptimes[k-1].stop, stoptimes[k].stop) |
distance_between_timepoints += util.ApproximateDistanceBetweenStops(stoptimes[k-1].stop, stoptimes[k].stop) |
next_timepoint = stoptimes[k] |
next_timepoint = stoptimes[k] |
rv.append( (st.GetTimeSecs(), st, True) ) |
rv.append( (st.GetTimeSecs(), st, True) ) |
else: |
else: |
distance_traveled_between_timepoints += util.ApproximateDistanceBetweenStops(stoptimes[i-1].stop, st.stop) |
distance_traveled_between_timepoints += util.ApproximateDistanceBetweenStops(stoptimes[i-1].stop, st.stop) |
distance_percent = distance_traveled_between_timepoints / distance_between_timepoints |
distance_percent = distance_traveled_between_timepoints / distance_between_timepoints |
total_time = next_timepoint.GetTimeSecs() - cur_timepoint.GetTimeSecs() |
total_time = next_timepoint.GetTimeSecs() - cur_timepoint.GetTimeSecs() |
time_estimate = distance_percent * total_time + cur_timepoint.GetTimeSecs() |
time_estimate = distance_percent * total_time + cur_timepoint.GetTimeSecs() |
rv.append( (int(round(time_estimate)), st, False) ) |
rv.append( (int(round(time_estimate)), st, False) ) |
|
|
return rv*/ |
return rv*/ |
} |
} |
|
function getTimeInterpolatedTripAtStop($trip_id, $stop_sequence) { |
|
foreach(getTimeInterpolatedTrip($tripID) as $tripStop) { |
|
if ($tripStop['stop_sequence'] == $stop_sequence) return $tripStop; |
|
} |
|
return Array(); |
|
} |
|
|
function tripStartTime($tripID) { |
function getTripStartTime($tripID) { |
$query = 'SELECT arrival_secs,departure_secs FROM stop_times WHERE trip_id=? ORDER BY stop_sequence LIMIT 1'; |
$query = 'SELECT arrival_secs,departure_secs FROM stop_times WHERE trip_id=? ORDER BY stop_sequence LIMIT 1'; |
|
|
} |
} |
|
|
function viaPoints($tripid, $stopid, $timingPointsOnly = false) |
|
{ |
|
global $APIurl; |
|
$url = $APIurl . "/json/tripstoptimes?trip=" . $tripid; |
|
$json = json_decode(getPage($url)); |
|
debug(print_r($json, true)); |
|
$stops = $json[0]; |
|
$times = $json[1]; |
|
$foundStop = false; |
|
$viaPoints = Array(); |
|
foreach ($stops as $key => $row) { |
|
if ($foundStop) { |
|
if (!$timingPointsOnly || !startsWith($row[5], "Wj")) { |
|
$viaPoints[] = Array( |
|
"id" => $row[0], |
|
"name" => $row[1], |
|
"time" => $times[$key] |
|
); |
|
} |
|
} |
|
else { |
|
if ($row[0] == $stopid) $foundStop = true; |
|
} |
|
} |
|
return $viaPoints; |
|
} |
|
function viaPointNames($tripid, $stopid) |
function viaPointNames($tripid, $stopid) |
{ |
{ |
$points = viaPoints($tripid, $stopid, true); |
global $conn; |
$pointNames = Array(); |
$query = "SELECT stop_name |
foreach ($points as $point) { |
FROM stop_times join stops on stops.stop_id = stop_times.stop_id |
$pointNames[] = $point['name']; |
WHERE stop_times.trip_id = '$tripid' |
|
AND stop_sequence > '$stop_sequence' |
|
AND substr(stop_code,1,2) != 'Wj' ORDER BY stop_sequence"; |
|
debug($query,"database"); |
|
$result = pg_query($conn, $query); |
|
if (!$result) { |
|
databaseError(pg_result_error($result)); |
|
return Array(); |
} |
} |
return implode(", ", $pointNames); |
$pointNames = pg_fetch_all($result); |
|
return r_implode(", ", $pointNames); |
} |
} |
?> |
?> |