--- a/include/db/route-dao.inc.php +++ b/include/db/route-dao.inc.php @@ -1,78 +1,133 @@ <?php function getRoute($routeID) { -/* - def handle_json_GET_routerow(self, params): - schedule = self.server.schedule - route = schedule.GetRoute(params.get('route', None)) - return [transitfeed.Route._FIELD_NAMES, route.GetFieldValuesTuple()] -*/ + $query = "Select * from routes where route_id = '$routeID' LIMIT 1"; + debug($query,"database"); + $result = pg_query($conn, $query); + if (!$result) { + databaseError(pg_result_error($result)); + return Array(); + } + return pg_fetch_assoc($result); } function getRoutes() { -/* def handle_json_GET_routes(self, params): - """Return a list of all routes.""" - schedule = self.server.schedule - result = [] - for r in schedule.GetRouteList(): - servicep = None - for t in schedule.GetTripList(): - if t.route_id == r.route_id: - servicep = t.service_period - break - result.append( (r.route_id, r.route_short_name, r.route_long_name, servicep.service_id) ) - result.sort(key = lambda x: x[1:3]) - return result -*/ + global $conn; + $query = "Select * from routes order by route_short_name;"; + debug($query,"database"); + $result = pg_query($conn, $query); + if (!$result) { + databaseError(pg_result_error($result)); + return Array(); + } + return pg_fetch_all($result); } -function findRouteByNumber($routeNumber) { - /* - def handle_json_GET_routesearch(self, params): - """Return a list of routes with matching short name.""" - schedule = self.server.schedule - routeshortname = params.get('routeshortname', None) - result = [] - for r in schedule.GetRouteList(): - if r.route_short_name == routeshortname: - servicep = None - for t in schedule.GetTripList(): - if t.route_id == r.route_id: - servicep = t.service_period - break - result.append( (r.route_id, r.route_short_name, r.route_long_name, servicep.service_id) ) - result.sort(key = lambda x: x[1:3]) - return result - */ +function getRoutesByNumber($routeNumber = "") { + global $conn; + if ($routeNumber != "") { + $query = "Select distinct routes.route_id,routes.route_short_name,routes.route_long_name,service_id from routes join trips on trips.route_id = +routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where route_short_name = '$routeNumber' order by route_short_name;"; + } else { + $query = "SELECT DISTINCT route_short_name from routes order by route_short_name"; + } + debug($query,"database"); + $result = pg_query($conn, $query); + if (!$result) { + databaseError(pg_result_error($result)); + return Array(); + } + return pg_fetch_all($result); } function getRouteNextTrip($routeID) { - /* - def handle_json_GET_routetrips(self, params): - """ Get a trip for a route_id (preferablly the next one) """ - schedule = self.server.schedule - query = params.get('route_id', None).lower() - result = [] - for t in schedule.GetTripList(): - if t.route_id == query: - try: - starttime = t.GetStartTime() - except: - print "Error for GetStartTime of trip #" + t.trip_id + sys.exc_info()[0] - else: - cursor = t._schedule._connection.cursor() - cursor.execute( - 'SELECT arrival_secs,departure_secs FROM stop_times WHERE ' - 'trip_id=? ORDER BY stop_sequence DESC LIMIT 1', (t.trip_id,)) - (arrival_secs, departure_secs) = cursor.fetchone() - if arrival_secs != None: - endtime = arrival_secs - elif departure_secs != None: - endtime = departure_secs - else: - endtime =0 - result.append ( (starttime, t.trip_id, endtime) ) - return sorted(result, key=lambda trip: trip[2]) - */ + global $conn; + $query = "select * from routes join trips on trips.route_id = routes.route_id +join stop_times on stop_times.trip_id = trips.trip_id where +arrival_time > CURRENT_TIME and routes.route_id = '$routeID' order by +arrival_time limit 1"; + debug($query,"database"); + $result = pg_query($conn, $query); + if (!$result) { + databaseError(pg_result_error($result)); + return Array(); + } + return pg_fetch_assoc($result); + } +function getRouteTrips($routeID) { + global $conn; + $query = "select * from routes join trips on trips.route_id = routes.route_id +join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = '$routeID' order by +arrival_time "; + debug($query,"database"); + $result = pg_query($conn, $query); + if (!$result) { + databaseError(pg_result_error($result)); + return Array(); + } + return pg_fetch_all($result); + } +function getRoutesByDestination($destination = "", $service_period = "") { + global $conn; + if ($service_period == "") $service_period = service_period(); + if ($destination != "") { + $query = "SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id +FROM stop_times join trips on trips.trip_id = +stop_times.trip_id join routes on trips.route_id = routes.route_id +WHERE route_long_name = '$destination' AND service_id='$service_period' order by route_short_name"; + } else { + $query = "SELECT DISTINCT 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 service_id='$service_period' order by route_long_name"; + } + debug($query,"database"); + $result = pg_query($conn, $query); + if (!$result) { + databaseError(pg_result_error($result)); + return Array(); + } + return pg_fetch_all($result); } +function getRoutesBySuburb($suburb, $service_period = "") { + if ($service_period == "") $service_period = service_period(); + 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 +join stops on stops.stop_id = stop_times.stop_id +WHERE zone_id LIKE '%$suburb;%' AND service_id='$service_period' ORDER BY route_short_name"; + debug($query,"database"); + $result = pg_query($conn, $query); + if (!$result) { + databaseError(pg_result_error($result)); + return Array(); + } + return pg_fetch_all($result); +} + +function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) { + + + if ($service_period == "") $service_period = service_period(); + if ($limit != "") $limit = " LIMIT $limit "; + global $conn; + $query = "SELECT service_id,trips.route_id,route_short_name,route_long_name, + min(ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE)) as distance +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 service_id='$service_period' +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 $limit"; + debug($query,"database"); + $result = pg_query($conn, $query); + if (!$result) { + databaseError(pg_result_error($result)); + return Array(); + } + return pg_fetch_all($result); +} ?>