<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the 'License'); | Licensed under the Apache License, Version 2.0 (the 'License'); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an 'AS IS' BASIS, | distributed under the License is distributed on an 'AS IS' BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
// SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',') | // SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',') |
$suburbs = explode(',', 'Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O\'Connor,O\'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla'); | $suburbs = explode(',', 'Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O\'Connor,O\'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla'); |
function staticmap($mapPoints, $collapsible = true, $twotone = false, $path = false, $numbered = false) { | function staticmap($mapPoints, $collapsible = true, $twotone = false, $path = false, $numbered = false) { |
$markers = ''; | $markers = ''; |
$height = 300; | $height = 300; |
$width = $height; | $width = $height; |
$index = 0; | $index = 0; |
if (sizeof($mapPoints) < 1) | if (sizeof($mapPoints) < 1) |
return 'map error'; | return 'map error'; |
if (sizeof($mapPoints) === 1) { | if (sizeof($mapPoints) === 1) { |
$markers = 'markers={$mapPoints[0][0]},{$mapPoints[0][1]}'; | $markers = 'markers='.$mapPoints[0][0].','.$mapPoints[0][1]; |
} else { | } else { |
if (!$numbered) { | if (!$numbered) { |
$markers = 'markers='; | $markers = 'markers='; |
} | } |
if ($path) { | if ($path) { |
$markers.= 'markers={$mapPoints[0][0]},{$mapPoints[0][1]}&path='; | $markers.= 'markers='.$mapPoints[0][0].','.$mapPoints[0][1].'&path='; |
} | } |
foreach ($mapPoints as $index => $mapPoint) { | foreach ($mapPoints as $index => $mapPoint) { |
if ($twotone && $index == 0) { | if ($twotone && $index == 0) { |
$markers = 'markerd=color:red|' . $mapPoint[0] . ',' . $mapPoint[1] . '&markers='; | $markers = 'markerd=color:red|' . $mapPoint[0] . ',' . $mapPoint[1] . '&markers='; |
} else { | } else { |
if ($numbered) { | if ($numbered) { |
$label = ($index > 9 ? 9 : $index); | $label = ($index > 9 ? 9 : $index); |
$markers.= 'markers=label:' . $label . '|' . $mapPoint[0] . ',' . $mapPoint[1]; | $markers.= 'markers=label:' . $label . '|' . $mapPoint[0] . ',' . $mapPoint[1]; |
if ($index + 1 != sizeof($mapPoints)) { | if ($index + 1 != sizeof($mapPoints)) { |
$markers.= '&'; | $markers.= '&'; |
} | } |
} else { | } else { |
$markers.= $mapPoint[0] . ',' . $mapPoint[1]; | $markers.= $mapPoint[0] . ',' . $mapPoint[1]; |
if ($index + 1 != sizeof($mapPoints)) { | if ($index + 1 != sizeof($mapPoints)) { |
$markers.= '|'; | $markers.= '|'; |
} | } |
} | } |
$index++; | $index++; |
} | } |
} | } |
} | } |
$output = ''; | $output = ''; |
if ($collapsible) | if ($collapsible) |
$output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>'; | $output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>'; |
if (isIOSDevice()) | if (isIOSDevice()) |
$output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=2&sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">'; | $output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=2&sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">'; |
else | else |
$output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=1&format=jpg&sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">'; | $output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=1&format=jpg&sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">'; |
if ($collapsible) | if ($collapsible) |
$output.= '</div>'; | $output.= '</div>'; |
return $output; | return $output; |
} | } |
function distance($lat1, $lng1, $lat2, $lng2, $roundLargeValues = false) { | function distance($lat1, $lng1, $lat2, $lng2, $roundLargeValues = false) { |
$pi80 = M_PI / 180; | $pi80 = M_PI / 180; |
$lat1*= $pi80; | $lat1*= $pi80; |
$lng1*= $pi80; | $lng1*= $pi80; |
$lat2*= $pi80; | $lat2*= $pi80; |
$lng2*= $pi80; | $lng2*= $pi80; |
$r = 6372.797; // mean radius of Earth in km | $r = 6372.797; // mean radius of Earth in km |
$dlat = $lat2 - $lat1; | $dlat = $lat2 - $lat1; |
$dlng = $lng2 - $lng1; | $dlng = $lng2 - $lng1; |
$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); | $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); |
$c = 2 * atan2(sqrt($a), sqrt(1 - $a)); | $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); |
$km = $r * $c; | $km = $r * $c; |
if ($roundLargeValues) { | if ($roundLargeValues) { |
if ($km < 1) | if ($km < 1) |
return floor($km * 1000); | return floor($km * 1000); |
else | else |
return round($km, 2) . 'k'; | return round($km, 2) . 'k'; |
} | } |
else | else |
return floor($km * 1000); | return floor($km * 1000); |
} | } |
function decodePolylineToArray($encoded) { | function decodePolylineToArray($encoded) { |
// source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5 | // source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5 |
$length = strlen($encoded); | $length = strlen($encoded); |
$index = 0; | $index = 0; |
$points = array(); | $points = array(); |
$lat = 0; | $lat = 0; |
$lng = 0; | $lng = 0; |
while ($index < $length) { | while ($index < $length) { |
// Temporary variable to hold each ASCII byte. | // Temporary variable to hold each ASCII byte. |
$b = 0; | $b = 0; |
// The encoded polyline consists of a latitude value followed by a | // The encoded polyline consists of a latitude value followed by a |
// longitude value. They should always come in pairs. Read the | // longitude value. They should always come in pairs. Read the |
// latitude value first. | // latitude value first. |
$shift = 0; | $shift = 0; |
$result = 0; | $result = 0; |
do { | do { |
// The `ord(substr($encoded, $index++))` statement returns the ASCII | // The `ord(substr($encoded, $index++))` statement returns the ASCII |
// code for the character at $index. Subtract 63 to get the original | // code for the character at $index. Subtract 63 to get the original |
// value. (63 was added to ensure proper ASCII characters are displayed | // value. (63 was added to ensure proper ASCII characters are displayed |
// in the encoded polyline string, which is `human` readable) | // in the encoded polyline string, which is `human` readable) |
$b = ord(substr($encoded, $index++)) - 63; | $b = ord(substr($encoded, $index++)) - 63; |
// AND the bits of the byte with 0x1f to get the original 5-bit `chunk. | // AND the bits of the byte with 0x1f to get the original 5-bit `chunk. |
// Then left shift the bits by the required amount, which increases | // Then left shift the bits by the required amount, which increases |
// by 5 bits each time. | // by 5 bits each time. |
// OR the value into $results, which sums up the individual 5-bit chunks | // OR the value into $results, which sums up the individual 5-bit chunks |
// into the original value. Since the 5-bit chunks were reversed in | // into the original value. Since the 5-bit chunks were reversed in |
// order during encoding, reading them in this way ensures proper | // order during encoding, reading them in this way ensures proper |
// summation. | // summation. |
$result|= ($b & 0x1f) << $shift; | $result|= ($b & 0x1f) << $shift; |
$shift+= 5; | $shift+= 5; |
} | } |
// Continue while the read byte is >= 0x20 since the last `chunk` | // Continue while the read byte is >= 0x20 since the last `chunk` |
// was not OR'd with 0x20 during the conversion process. (Signals the end) | // was not OR'd with 0x20 during the conversion process. (Signals the end) |
while ($b >= 0x20); | while ($b >= 0x20); |
// Check if negative, and convert. (All negative values have the last bit | // Check if negative, and convert. (All negative values have the last bit |
// set) | // set) |
$dlat = (($result & 1) ? ~($result >> 1) : ($result >> 1)); | $dlat = (($result & 1) ? ~($result >> 1) : ($result >> 1)); |
// Compute actual latitude since value is offset from previous value. | // Compute actual latitude since value is offset from previous value. |
$lat+= $dlat; | $lat+= $dlat; |
// The next values will correspond to the longitude for this point. | // The next values will correspond to the longitude for this point. |
$shift = 0; | $shift = 0; |
$result = 0; | $result = 0; |
do { | do { |
$b = ord(substr($encoded, $index++)) - 63; | $b = ord(substr($encoded, $index++)) - 63; |
$result|= ($b & 0x1f) << $shift; | $result|= ($b & 0x1f) << $shift; |
$shift+= 5; | $shift+= 5; |
} while ($b >= 0x20); | } while ($b >= 0x20); |
$dlng = (($result & 1) ? ~($result >> 1) : ($result >> 1)); | $dlng = (($result & 1) ? ~($result >> 1) : ($result >> 1)); |
$lng+= $dlng; | $lng+= $dlng; |
// The actual latitude and longitude values were multiplied by | // The actual latitude and longitude values were multiplied by |
// 1e5 before encoding so that they could be converted to a 32-bit | // 1e5 before encoding so that they could be converted to a 32-bit |
// integer representation. (With a decimal accuracy of 5 places) | // integer representation. (With a decimal accuracy of 5 places) |
// Convert back to original values. | // Convert back to original values. |
$points[] = array( | $points[] = array( |
$lat * 1e-5, | $lat * 1e-5, |
$lng * 1e-5 | $lng * 1e-5 |
); | ); |
} | } |
return $points; | return $points; |
} | } |
function geocode($query, $giveOptions) { | function geocode($query, $giveOptions) { |
global $cloudmadeAPIkey; | global $cloudmadeAPIkey; |
$url = 'http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=' . urlencode($query) . '&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true'; | $url = 'http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=' . urlencode($query) . '&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true'; |
$contents = json_decode(getPage($url)); | $contents = json_decode(getPage($url)); |
if ($giveOptions) | if ($giveOptions) |
return $contents->features; | return $contents->features; |
elseif (isset($contents->features[0]->centroid)) | elseif (isset($contents->features[0]->centroid)) |
return $contents->features[0]->centroid->coordinates[0] . ',' . $contents->features[0]->centroid->coordinates[1]; | return $contents->features[0]->centroid->coordinates[0] . ',' . $contents->features[0]->centroid->coordinates[1]; |
else | else |
return ''; | return ''; |
} | } |
function reverseGeocode($lat, $lng) { | function reverseGeocode($lat, $lng) { |
global $cloudmadeAPIkey; | global $cloudmadeAPIkey; |
$url = 'http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=' . $lat . ',' . $lng . '&distance=closest&object_type=road'; | $url = 'http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=' . $lat . ',' . $lng . '&distance=closest&object_type=road'; |
$contents = json_decode(getPage($url)); | $contents = json_decode(getPage($url)); |
return $contents->features[0]->properties->name; | return $contents->features[0]->properties->name; |
} | } |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the 'License'); | Licensed under the Apache License, Version 2.0 (the 'License'); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an 'AS IS' BASIS, | distributed under the License is distributed on an 'AS IS' BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
function getRoute($routeID) { | function getRoute($routeID) { |
global $conn; | global $conn; |
$query = 'Select * from routes where route_id = :routeID LIMIT 1'; | $query = 'Select * from routes where route_id = :routeID LIMIT 1'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':routeID', $routeID); | $query->bindParam(':routeID', $routeID); |
$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 getRoutesByShortName($routeShortName) { | function getRoutesByShortName($routeShortName) { |
global $conn; | global $conn; |
$query = 'Select distinct route_id, route_short_name from routes where route_short_name = :routeShortName'; | $query = 'Select distinct route_id, route_short_name from routes where route_short_name = :routeShortName'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':routeShortName', $routeShortName); | $query->bindParam(':routeShortName', $routeShortName); |
$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 getRouteHeadsigns($routeID) { | function getRouteHeadsigns($routeID) { |
global $conn; | global $conn; |
$query = 'select stops.stop_name, trip_headsign, direction_id,max(service_id) as service_id, count(*) | $query = 'select stops.stop_name, trip_headsign, direction_id,max(service_id) as service_id, count(*) |
from routes join trips on trips.route_id = routes.route_id | from routes join trips on trips.route_id = routes.route_id |
join stop_times on stop_times.trip_id = trips.trip_id join stops on | join stop_times on stop_times.trip_id = trips.trip_id join stops on |
stop_times.stop_id = stops.stop_id where trips.route_id = :routeID | stop_times.stop_id = stops.stop_id where trips.route_id = :routeID |
and stop_times.stop_sequence = 1 group by stops.stop_name, trip_headsign, direction_id having count(*) > 2'; | and stop_times.stop_sequence = 1 group by stops.stop_name, trip_headsign, direction_id having count(*) > 2'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':routeID', $routeID); | $query->bindParam(':routeID', $routeID); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
$results = $query->fetchAll(); | $results = $query->fetchAll(); |
if (is_array($results)) { | if (is_array($results)) { |
return $results; | return $results; |
} else { | } else { |
return Array($results); | return Array($results); |
} | } |
} | } |
function getRouteDescription($routeID, $directionID) { | function getRouteDescription($routeID, $directionID) { |
$trip = getRouteNextTrip($routeID, $directionID); | $trip = getRouteNextTrip($routeID, $directionID); |
$start = getTripStartingPoint($trip['trip_id']); | $start = getTripStartingPoint($trip['trip_id']); |
$end = getTripDestination($trip['trip_id']); | $end = getTripDestination($trip['trip_id']); |
return 'From ' . $start['stop_name'] . ' to ' . $end['stop_name']; | return 'From ' . $start['stop_name'] . ' to ' . $end['stop_name']; |
} | } |
function getRouteByFullName($routeFullName) { | function getRouteByFullName($routeFullName) { |
global $conn; | global $conn; |
$query = 'Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1'; | $query = 'Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':routeFullName', $routeFullName); | $query->bindParam(':routeFullName', $routeFullName); |
$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 getRoutes() { | function getRoutes() { |
global $conn; | global $conn; |
$query = 'Select * from routes order by route_short_name;'; | $query = 'Select * from routes order by route_short_name;'; |
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(); |
} | } |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
function getRoutesByNumberSeries($routeNumberSeries = '') { | function getRoutesByNumberSeries($routeNumberSeries = '') { |
global $conn; | global $conn; |
if (strlen($routeNumberSeries) == 1) { | if (strlen($routeNumberSeries) == 1) { |
return getRoute($routeNumberSeries); | return getRoute($routeNumberSeries); |
} | } |
$seriesMin = substr($routeNumberSeries, 0, -1) . '0'; | $seriesMin = substr($routeNumberSeries, 0, -1) . '0'; |
$seriesMax = substr($routeNumberSeries, 0, -1) . '9'; | $seriesMax = substr($routeNumberSeries, 0, -1) . '9'; |
$query = 'Select distinct routes.route_id,routes.route_short_name,routes.route_long_name,service_id from routes join trips on trips.route_id = | $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 to_number(route_short_name, \'FM999\') between :seriesMin and :seriesMax OR route_short_name LIKE :routeNumberSeries order by route_short_name;'; | routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where to_number(route_short_name, \'FM999\') between :seriesMin and :seriesMax OR route_short_name LIKE :routeNumberSeries order by route_short_name;'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':seriesMin', $seriesMin); | $query->bindParam(':seriesMin', $seriesMin); |
$query->bindParam(':seriesMax', $seriesMax); | $query->bindParam(':seriesMax', $seriesMax); |
$routeNumberSeries = '% ' . substr($routeNumberSeries, 0, -1) . '%'; | $routeNumberSeries = '% ' . substr($routeNumberSeries, 0, -1) . '%'; |
$query->bindParam(':routeNumberSeries', $routeNumberSeries); | $query->bindParam(':routeNumberSeries', $routeNumberSeries); |
$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 getRouteNextTrip($routeID, $directionID) { | function getRouteNextTrip($routeID, $directionID) { |
global $conn; | global $conn; |
$query = 'select routes.route_id,routes.route_url,direction_id,trips.trip_id,trip_headsign,departure_time,service_id from routes join trips on trips.route_id = routes.route_id | $query = 'select routes.route_id,routes.route_url,direction_id,trips.trip_id,trip_headsign,departure_time,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 arrival_time between :currentTime and :futureTime | join stop_times on stop_times.trip_id = trips.trip_id where arrival_time between :currentTime and :futureTime |
and routes.route_id = :routeID and trips.direction_id = :directionID order by | and routes.route_id = :routeID and trips.direction_id = :directionID order by |
arrival_time limit 1'; | arrival_time limit 1'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':currentTime', current_time()); | $query->bindParam(':currentTime', current_time()); |
$futureTime = current_time(strtotime(current_time() . ' +2h')); | $futureTime = current_time(strtotime(current_time() . ' +2h')); |
if (date('h', strtotime(current_time()) > 22)) | if (date('h', strtotime(current_time()) > 22)) |
$futureTime = '23:59:59'; | $futureTime = '23:59:59'; |
$query->bindParam(':futureTime', $futureTime); | $query->bindParam(':futureTime', $futureTime); |
$query->bindParam(':routeID', $routeID); | $query->bindParam(':routeID', $routeID); |
$query->bindParam(':directionID', $directionID); | $query->bindParam(':directionID', $directionID); |
$query->execute(); | $query->execute(); |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
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; | return $r; |
} | } |
function getRouteFirstTrip($routeID, $directionID) { | function getRouteFirstTrip($routeID, $directionID) { |
global $conn; | global $conn; |
$query = 'select * from routes join trips on trips.route_id = routes.route_id | $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 | join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID |
and trips.direction_id = :directionID order by | and trips.direction_id = :directionID order by |
arrival_time DESC limit 1'; | arrival_time DESC limit 1'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':routeID', $routeID); | $query->bindParam(':routeID', $routeID); |
$query->bindParam(':directionID', $directionID); | $query->bindParam(':directionID', $directionID); |
$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; | return $r; |
} | } |
function getRouteAtStop($routeID, $directionID, $stop_id) { | function getRouteAtStop($routeID, $directionID, $stop_id) { |
$nextTrip = getRouteNextTrip($routeID, $directionID); | $nextTrip = getRouteNextTrip($routeID, $directionID); |
if ($nextTrip['trip_id']) { | if ($nextTrip['trip_id']) { |
foreach (getTripStopTimes($nextTrip['trip_id']) as $tripStop) { | foreach (getTripStopTimes($nextTrip['trip_id']) as $tripStop) { |
if ($tripStop['stop_id'] == $stop_id) | if ($tripStop['stop_id'] == $stop_id) |
return $tripStop; | return $tripStop; |
} | } |
} | } |
return Array(); | return Array(); |
} | } |
function getRouteTrips($routeID, $directionID = '', $service_period = '') { | function getRouteTrips($routeID, $directionID = '', $service_period = '') { |
global $conn; | global $conn; |
if ($service_period == '') | if ($service_period == '') |
$service_period = service_period(); | $service_period = service_period(); |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
$directionSQL = ''; | $directionSQL = ''; |
if ($directionID != '') | if ($directionID != '') |
$directionSQL = ' and direction_id = :directionID '; | $directionSQL = ' and direction_id = :directionID '; |
$query = 'select routes.route_id,trips.trip_id,service_id,arrival_time, stop_id, stop_sequence from routes join trips on trips.route_id = routes.route_id | $query = 'select routes.route_id,trips.trip_id,service_id,arrival_time, stop_id, stop_sequence from routes join trips on trips.route_id = routes.route_id |
join stop_times on stop_times.trip_id = trips.trip_id where (service_id=:service_periodA OR service_id=:service_periodB) | join stop_times on stop_times.trip_id = trips.trip_id where (service_id=:service_periodA OR service_id=:service_periodB) |
AND (routes.route_id = :routeID) ' . $directionSQL . ' and stop_sequence = \'1\' order by | AND (routes.route_id = :routeID) ' . $directionSQL . ' and stop_sequence = \'1\' order by |
arrival_time '; | arrival_time '; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':routeID', $routeID); | $query->bindParam(':routeID', $routeID); |
$query->bindParam(':service_periodA', $sidA); | $query->bindParam(':service_periodA', $sidA); |
$query->bindParam(':service_periodB', $sidB); | $query->bindParam(':service_periodB', $sidB); |
if ($directionSQL != '') | if ($directionSQL != '') |
$query->bindParam(':directionID', $directionID); | $query->bindParam(':directionID', $directionID); |
$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 getRoutesByDestination($destination = '', $service_period = '') { | function getRoutesByDestination($destination = '', $service_period = '') { |
global $conn; | global $conn; |
if ($service_period == '') | if ($service_period == '') |
$service_period = service_period(); | $service_period = service_period(); |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
if ($destination != '') { | if ($destination != '') { |
/* $query = 'SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id | /* $query = 'SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id |
FROM stop_times join trips on trips.trip_id = | FROM stop_times join trips on trips.trip_id = |
stop_times.trip_id join routes on trips.route_id = routes.route_id | stop_times.trip_id join routes on trips.route_id = routes.route_id |
WHERE route_long_name = :destination AND (service_id=:service_periodA OR service_id=:service_periodB) | WHERE route_long_name = :destination AND (service_id=:service_periodA OR service_id=:service_periodB) |
order by route_short_name'; */ | order by route_short_name'; */ |
$query = 'select route_id, direction_id, stop_name, b.trip_id, b.stop_sequence from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id | $query = 'select route_id, direction_id, stop_name, b.trip_id, b.stop_sequence from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id |
from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence and stop_name = :destination order by route_id;'; | from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence and stop_name = :destination order by route_id;'; |
} else { | } else { |
$query = 'select stop_name from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id | $query = 'select stop_name from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id |
from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence group by stop_name order by stop_name;'; | from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence group by stop_name order by stop_name;'; |
} | } |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
//$query->bindParam(':service_periodA', $sidA); | //$query->bindParam(':service_periodA', $sidA); |
//$query->bindParam(':service_periodB', $sidB); | //$query->bindParam(':service_periodB', $sidB); |
if ($destination != '') | if ($destination != '') |
$query->bindParam(':destination', $destination); | $query->bindParam(':destination', $destination); |
$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 getRoutesBySuburb($suburb, $service_period = '') { | function getRoutesBySuburb($suburb, $service_period = '') { |
if ($service_period == '') | if ($service_period == '') |
$service_period = service_period(); | $service_period = service_period(); |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
global $conn; | global $conn; |
$query = 'SELECT DISTINCT service_id,trips.route_id,route_short_name,route_long_name | $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 | FROM stop_times 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 stop_desc LIKE :suburb AND (service_id=:service_periodA OR service_id=:service_periodB) | WHERE stop_desc LIKE :suburb AND (service_id=:service_periodA OR service_id=:service_periodB) |
ORDER BY route_short_name'; | ORDER BY route_short_name'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':service_periodA', $sidA); | $query->bindParam(':service_periodA', $sidA); |
$query->bindParam(':service_periodB', $sidB); | $query->bindParam(':service_periodB', $sidB); |
$suburb = '%Suburb: %' . $suburb . '%'; | $suburb = '%Suburb: %' . $suburb . '%'; |
$query->bindParam(':suburb', $suburb); | $query->bindParam(':suburb', $suburb); |
$query->execute(); | $query->execute(); |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
function getRoutesNearby($lat, $lng, $limit = '', $distance = 500) { | function getRoutesNearby($lat, $lng, $limit = '', $distance = 500) { |
// if ($service_period == '') | // if ($service_period == '') |
$service_period = service_period(); | $service_period = service_period(); |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
$limitSQL = ''; | $limitSQL = ''; |
if ($limit != '') | if ($limit != '') |
$limitSQL = ' LIMIT :limit '; | $limitSQL = ' LIMIT :limit '; |
global $conn; | global $conn; |
$query = 'SELECT service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id, | $query = 'SELECT service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id, |
min(ST_Distance(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), FALSE)) as distance | min(ST_Distance(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), FALSE)) as distance |
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 (service_id=:service_periodA OR service_id=:service_periodB) | WHERE (service_id=:service_periodA OR service_id=:service_periodB) |
AND ST_DWithin(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), :distance, FALSE) | AND ST_DWithin(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), :distance, FALSE) |
group by service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name | group by service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name |
order by distance $limitSQL'; | order by distance '.$limitSQL; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':service_periodA', $sidA); | $query->bindParam(':service_periodA', $sidA); |
$query->bindParam(':service_periodB', $sidB); | $query->bindParam(':service_periodB', $sidB); |
$query->bindParam(':distance', $distance); | $query->bindParam(':distance', $distance); |
if ($limit != '') | if ($limit != '') |
$query->bindParam(':limit', $limit); | $query->bindParam(':limit', $limit); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the 'License'); | Licensed under the Apache License, Version 2.0 (the 'License'); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an 'AS IS' BASIS, | distributed under the License is distributed on an 'AS IS' BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
function getStop($stopID) { | function getStop($stopID) { |
global $conn; | global $conn; |
$query = 'Select * from stops where stop_id = :stopID LIMIT 1'; | $query = 'Select * from stops where stop_id = :stopID LIMIT 1'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':stopID', $stopID); | $query->bindParam(':stopID', $stopID); |
$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 getStops($firstLetter = '', $startsWith = '') { | function getStops($firstLetter = '', $startsWith = '') { |
global $conn; | global $conn; |
$conditions = Array(); | $conditions = Array(); |
if ($firstLetter != '') | if ($firstLetter != '') |
$conditions[] = 'substr(stop_name,1,1) = :firstLetter'; | $conditions[] = 'substr(stop_name,1,1) = :firstLetter'; |
if ($startsWith != '') | if ($startsWith != '') |
$conditions[] = 'stop_name like :startsWith'; | $conditions[] = 'stop_name like :startsWith'; |
$query = 'Select * from stops'; | $query = 'Select * from stops'; |
if (sizeof($conditions) > 0) { | if (sizeof($conditions) > 0) { |
if (sizeof($conditions) > 1) { | if (sizeof($conditions) > 1) { |
$query .= ' Where ' . implode(' AND ', $conditions) . ' '; | $query .= ' Where ' . implode(' AND ', $conditions) . ' '; |
} else { | } else { |
$query .= ' Where ' . $conditions[0] . ' '; | $query .= ' Where ' . $conditions[0] . ' '; |
} | } |
} | } |
$query .= ' order by stop_name;'; | $query .= ' order by stop_name;'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
if ($firstLetter != '') | if ($firstLetter != '') |
$query->bindParam(':firstLetter', $firstLetter); | $query->bindParam(':firstLetter', $firstLetter); |
if ($startsWith != '') { | if ($startsWith != '') { |
$startsWith = $startsWith . '%'; | $startsWith = $startsWith . '%'; |
$query->bindParam(':startsWith', $startsWith); | $query->bindParam(':startsWith', $startsWith); |
} | } |
$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 getNearbyStops($lat, $lng, $limit = '', $distance = 1000) { | function getNearbyStops($lat, $lng, $limit = '', $distance = 1000) { |
if ($lat == null || $lng == null) | if ($lat == null || $lng == null) |
return Array(); | return Array(); |
if ($limit != '') | if ($limit != '') |
$limitSQL = ' LIMIT :limit '; | $limitSQL = ' LIMIT :limit '; |
global $conn; | global $conn; |
$query = 'Select *, ST_Distance(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), FALSE) as distance | $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) | from stops WHERE ST_DWithin(position, ST_GeographyFromText(\'SRID=4326;POINT('.$lng.' '.$lat.')\'), :distance, FALSE) |
order by distance $limitSQL;'; | order by distance '.$limitSQL; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':distance', $distance); | $query->bindParam(':distance', $distance); |
$query->bindParam(':limit', $limit); | $query->bindParam(':limit', $limit); |
$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 getStopsByName($name) { | function getStopsByName($name) { |
global $conn; | global $conn; |
$query = 'Select * from stops where stop_name LIKE :name;'; | $query = 'Select * from stops where stop_name LIKE :name;'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$name = $name . '%'; | $name = $name . '%'; |
$query->bindParam(':name', $name); | $query->bindParam(':name', $name); |
$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 getStopsBySuburb($suburb) { | function getStopsBySuburb($suburb) { |
global $conn; | global $conn; |
$query = 'Select * from stops where stop_desc LIKE :suburb order by stop_name;'; | $query = 'Select * from stops where stop_desc LIKE :suburb order by stop_name;'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$suburb = '%<br>Suburb: %' . $suburb . '%'; | $suburb = '%<br>Suburb: %' . $suburb . '%'; |
$query->bindParam(':suburb', $suburb); | $query->bindParam(':suburb', $suburb); |
$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 getStopsByStopCode($stop_code, $startsWith = '') { | function getStopsByStopCode($stop_code, $startsWith = '') { |
global $conn; | global $conn; |
$query = 'Select * from stops where (stop_code = :stop_code OR stop_code LIKE :stop_code2)'; | $query = 'Select * from stops where (stop_code = :stop_code OR stop_code LIKE :stop_code2)'; |
if ($startsWith != '') | if ($startsWith != '') |
$query .= ' AND stop_name like :startsWith'; | $query .= ' AND stop_name like :startsWith'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':stop_code', $stop_code); | $query->bindParam(':stop_code', $stop_code); |
$stop_code2 = $stop_code . '%'; | $stop_code2 = $stop_code . '%'; |
$query->bindParam(':stop_code2', $stop_code2); | $query->bindParam(':stop_code2', $stop_code2); |
if ($startsWith != '') { | if ($startsWith != '') { |
$startsWith = $startsWith . '%'; | $startsWith = $startsWith . '%'; |
$query->bindParam(':startsWith', $startsWith); | $query->bindParam(':startsWith', $startsWith); |
} | } |
$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 getStopRoutes($stopID, $service_period) { | function getStopRoutes($stopID, $service_period) { |
if ($service_period == '') { | if ($service_period == '') { |
$service_period = service_period(); | $service_period = service_period(); |
} | } |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
global $conn; | global $conn; |
$query = 'SELECT distinct service_id,trips.route_id,route_short_name,route_long_name | $query = 'SELECT distinct service_id,trips.route_id,route_short_name,route_long_name |
FROM stop_times join trips on trips.trip_id = | 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 | stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE stop_id = :stopID |
AND (service_id=:service_periodA OR service_id=:service_periodB)'; | AND (service_id=:service_periodA OR service_id=:service_periodB)'; |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':service_periodA', $sidA); | $query->bindParam(':service_periodA', $sidA); |
$query->bindParam(':service_periodB', $sidB); | $query->bindParam(':service_periodB', $sidB); |
$query->bindParam(':stopID', $stopID); | $query->bindParam(':stopID', $stopID); |
$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 getStopTrips($stopID, $service_period = '', $afterTime = '', $limit = '', $route_short_name = '') { | function getStopTrips($stopID, $service_period = '', $afterTime = '', $limit = '', $route_short_name = '') { |
if ($service_period == '') { | if ($service_period == '') { |
$service_period = service_period(); | $service_period = service_period(); |
} | } |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
$limitSQL = ''; | $limitSQL = ''; |
if ($limit != '') | if ($limit != '') |
$limitSQL .= ' LIMIT :limit '; | $limitSQL .= ' LIMIT :limit '; |
global $conn; | global $conn; |
if ($afterTime != '') { | if ($afterTime != '') { |
$query = ' SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,trips.direction_id,trips.trip_headsign,route_short_name,route_long_name,end_times.arrival_time as end_time | $query = ' SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,trips.direction_id,trips.trip_headsign,route_short_name,route_long_name,end_times.arrival_time as end_time |
FROM stop_times | FROM stop_times |
join trips on trips.trip_id = | join trips on trips.trip_id = |
stop_times.trip_id | stop_times.trip_id |
join routes on trips.route_id = routes.route_id , (SELECT trip_id,max(arrival_time) as arrival_time from stop_times | join routes on trips.route_id = routes.route_id , (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 stop_times.arrival_time IS NOT NULL group by trip_id) as end_times |
WHERE stop_times.stop_id = :stopID | WHERE stop_times.stop_id = :stopID |
AND stop_times.trip_id = end_times.trip_id | AND stop_times.trip_id = end_times.trip_id |
AND (service_id=:service_periodA OR service_id=:service_periodB) ' . ($route_short_name != '' ? ' AND route_short_name = :route_short_name ' : '') . ' | AND (service_id=:service_periodA OR service_id=:service_periodB) ' . ($route_short_name != '' ? ' AND route_short_name = :route_short_name ' : '') . ' |
AND end_times.arrival_time > :afterTime | AND end_times.arrival_time > :afterTime |
ORDER BY end_time $limitSQL'; | ORDER BY end_time '.$limitSQL; |
} else { | } else { |
$query = 'SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name | $query = 'SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,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 = | join trips on trips.trip_id = |
stop_times.trip_id | stop_times.trip_id |
join routes on trips.route_id = routes.route_id | join routes on trips.route_id = routes.route_id |
WHERE stop_times.stop_id = :stopID | WHERE stop_times.stop_id = :stopID |
AND (service_id=:service_periodA OR service_id=:service_periodB) ' . ($route_short_name != '' ? ' AND route_short_name = :route_short_name ' : '') . ' | AND (service_id=:service_periodA OR service_id=:service_periodB) ' . ($route_short_name != '' ? ' AND route_short_name = :route_short_name ' : '') . ' |
ORDER BY arrival_time $limitSQL'; | ORDER BY arrival_time '.$limitSQL; |
} | } |
debug($query, 'database'); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(':service_periodA', $sidA); | $query->bindParam(':service_periodA', $sidA); |
$query->bindParam(':service_periodB', $sidB); | $query->bindParam(':service_periodB', $sidB); |
$query->bindParam(':stopID', $stopID); | $query->bindParam(':stopID', $stopID); |
if ($limit != '') | if ($limit != '') |
$query->bindParam(':limit', $limit); | $query->bindParam(':limit', $limit); |
if ($afterTime != '') | if ($afterTime != '') |
$query->bindParam(':afterTime', $afterTime); | $query->bindParam(':afterTime', $afterTime); |
if ($route_short_name != '') | if ($route_short_name != '') |
$query->bindParam(':route_short_name', $route_short_name); | $query->bindParam(':route_short_name', $route_short_name); |
$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 getStopTripsWithTimes($stopID, $time = '', $service_period = '', $time_range = '', $limit = '') { | function getStopTripsWithTimes($stopID, $time = '', $service_period = '', $time_range = '', $limit = '') { |
if ($service_period == '') | if ($service_period == '') |
$service_period = service_period(); | $service_period = service_period(); |
if ($time_range == '') | if ($time_range == '') |
$time_range = (24 * 60 * 60); | $time_range = (24 * 60 * 60); |
if ($time == '') | if ($time == '') |
$time = current_time(); | $time = current_time(); |
if ($limit == '') | if ($limit == '') |
$limit = 10; | $limit = 10; |
$trips = getStopTrips($stopID, $service_period, $time); | $trips = getStopTrips($stopID, $service_period, $time); |
$timedTrips = Array(); | $timedTrips = Array(); |
if ($trips && sizeof($trips) > 0) { | if ($trips && sizeof($trips) > 0) { |
foreach ($trips as $trip) { | foreach ($trips as $trip) { |
if ($trip['arrival_time'] != '') { | if ($trip['arrival_time'] != '') { |
if (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)) { | if (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)) { |
$timedTrips[] = $trip; | $timedTrips[] = $trip; |
} | } |
} else { | } else { |
$timedTrip = getTripAtStop($trip['trip_id'], $trip['stop_sequence']); | $timedTrip = getTripAtStop($trip['trip_id'], $trip['stop_sequence']); |
if ($timedTrip['arrival_time'] > $time and strtotime($timedTrip['arrival_time']) < (strtotime($time) + $time_range)) { | if ($timedTrip['arrival_time'] > $time and strtotime($timedTrip['arrival_time']) < (strtotime($time) + $time_range)) { |
$timedTrips[] = $timedTrip; | $timedTrips[] = $timedTrip; |
} | } |
} | } |
if (sizeof($timedTrips) > $limit) | if (sizeof($timedTrips) > $limit) |
break; | break; |
} | } |
sktimesort($timedTrips, 'arrival_time', true); | sktimesort($timedTrips, 'arrival_time', true); |
} | } |
return $timedTrips; | return $timedTrips; |
} | } |