Refactor route list
[busui.git] / include / db / stop-dao.inc.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
function getStop($stopID)
{
global $conn;
        $query = "Select * from stops where stop_id = '$stopID' 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 getStops($timingPointsOnly = false, $firstLetter = "")
{
        global $conn;
        $conditions = Array();
        if ($timingPointsOnly) $conditions[] = "substr(stop_code,1,2) != 'Wj'";
        if ($firstLetter != "") $conditions[] = "substr(stop_name,1,1) = '$firstLetter'";
        $query = "Select * from stops";
        if (sizeof($conditions) > 0) {
            if (sizeof($conditions) > 1) {
                $query .= " Where ".implode(" AND ",$conditions)." ";
            }
            else {
                $query .= " Where ".$conditions[0]." ";
            }
        }
        $query .= " order by stop_name;";
        debug($query,"database");
        $result = pg_query($conn, $query);
        if (!$result) {
                databaseError(pg_result_error($result));
                return Array();
        }
        return pg_fetch_all($result);
}
function getNearbyStops($lat, $lng, $limit, $distance = 1000)
{
   if ($lat == null || $lng == null) return Array();
   global $conn;
        $query = "Select *, ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE) as distance
        from stops WHERE ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), $distance, FALSE)
        order by distance;";
        debug($query,"database");
        $result = pg_query($conn, $query);
        if (!$result) {
                databaseError(pg_result_error($result));
                return Array();
        }
        return pg_fetch_all($result);
}
function getStopsBySuburb($suburb)
{
global $conn;
        $query = "Select * from stops where zone_id LIKE '%$suburb;%' order by stop_name;";
        debug($query,"database");
        $result = pg_query($conn, $query);
        if (!$result) {
                databaseError(pg_result_error($result));
                return Array();
        }
        return pg_fetch_all($result);
}
function getStopRoutes($stopID, $service_period)
{
        if ($service_period == "") $service_period = service_period();
    global $conn;
        $query = "SELECT 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 WHERE stop_id = '$stopID' AND service_id='$service_period'";
        debug($query,"database");
        $result = pg_query($conn, $query);
        if (!$result) {
                databaseError(pg_result_error($result));
                return Array();
        }
        return pg_fetch_all($result);}
function getStopTrips($stopID, $service_period = "")
{
    if ($service_period == "") $service_period = service_period();
    global $conn;
        $query = "SELECT stop_times.trip_id,arrival_time,stop_id,stop_sequence,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 WHERE stop_id = '$stopID' AND service_id='$service_period'";
        debug($query,"database");
        $result = pg_query($conn, $query);
        if (!$result) {
                databaseError(pg_result_error($result));
                return Array();
        }
        return pg_fetch_all($result);
 
}
function getStopTripsWithTimes($stopID, $time = "", $service_period = "", $time_range = "")
{
       if ($service_period == "") $service_period = service_period();
       if ($time_range == "") $time_range = (24*60*60);
       if ($time == "") $time = ($_SESSION['time'] ? $_SESSION['time'] : date("h:i:00"));
       $trips = getStopTrips($stopID,$service_period);
       $timedTrips = Array();
          foreach ($trips as $trip) {
            if ($trip['arrival_time'] != "") {
                if (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)){
                $timedTrips[] = $trip;
                }
            } else {
             $tripstarttime = getTripStartTime($trip['trip_id']);
             if ($tripstarttime > $time and $tripstarttime < ($time + $time_range)) {
               $timedtrip = getTimeInterpolatedTripStop($trip['trip_id'], $trip['stop_sequence']);
               if (strtotime($timedtrip['arrival_time']) > strtotime($time) and $timedtrip['arrival_time'] < (strtotime($time) + strtotime($time_range))){
                 $timedTrips[] = $timedTrip;
               }
             }
            }
            if (sizeof($timedTrips) > limit) break;
          }
           sktimesort($timedTrips,"arrival_time", true);
           return $timedTrips;
}
?>