';
- return $output;
-}
-
-function distance($lat1, $lng1, $lat2, $lng2)
-{
- $pi80 = M_PI / 180;
- $lat1 *= $pi80;
- $lng1 *= $pi80;
- $lat2 *= $pi80;
- $lng2 *= $pi80;
-
- $r = 6372.797; // mean radius of Earth in km
- $dlat = $lat2 - $lat1;
- $dlng = $lng2 - $lng1;
- $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));
- $km = $r * $c;
-
- return $km * 1000;
-}
-
-function decodePolylineToArray($encoded)
-{
-// source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5
- $length = strlen($encoded);
- $index = 0;
- $points = array();
- $lat = 0;
- $lng = 0;
-
- while ($index < $length)
- {
- // Temporary variable to hold each ASCII byte.
- $b = 0;
-
- // The encoded polyline consists of a latitude value followed by a
- // longitude value. They should always come in pairs. Read the
- // latitude value first.
- $shift = 0;
- $result = 0;
- do
- {
- // The `ord(substr($encoded, $index++))` statement returns the ASCII
- // code for the character at $index. Subtract 63 to get the original
- // value. (63 was added to ensure proper ASCII characters are displayed
- // in the encoded polyline string, which is `human` readable)
- $b = ord(substr($encoded, $index++)) - 63;
-
- // 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
- // by 5 bits each time.
- // 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
- // order during encoding, reading them in this way ensures proper
- // summation.
- $result |= ($b & 0x1f) << $shift;
- $shift += 5;
- }
- // Continue while the read byte is >= 0x20 since the last `chunk`
- // was not OR'd with 0x20 during the conversion process. (Signals the end)
- while ($b >= 0x20);
-
- // Check if negative, and convert. (All negative values have the last bit
- // set)
- $dlat = (($result & 1) ? ~($result >> 1) : ($result >> 1));
-
- // Compute actual latitude since value is offset from previous value.
- $lat += $dlat;
-
- // The next values will correspond to the longitude for this point.
- $shift = 0;
- $result = 0;
- do
- {
- $b = ord(substr($encoded, $index++)) - 63;
- $result |= ($b & 0x1f) << $shift;
- $shift += 5;
- }
- while ($b >= 0x20);
-
- $dlng = (($result & 1) ? ~($result >> 1) : ($result >> 1));
- $lng += $dlng;
-
- // The actual latitude and longitude values were multiplied by
- // 1e5 before encoding so that they could be converted to a 32-bit
- // integer representation. (With a decimal accuracy of 5 places)
- // Convert back to original values.
- $points[] = array($lat * 1e-5, $lng * 1e-5);
- }
-
- return $points;
-}
-
-function object2array($object) {
- if (is_object($object)) {
- foreach ($object as $key => $value) {
- $array[$key] = $value;
- }
- }
- else {
- $array = $object;
- }
- return $array;
-}
-
-function geocode($query, $giveOptions) {
- 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";
- $contents = json_decode(getPage($url));
- if ($giveOptions) return $contents->features;
- elseif (isset($contents->features[0]->centroid)) return $contents->features[0]->centroid->coordinates[0].",".$contents->features[0]->centroid->coordinates[1];
- else return "";
-}
-
-function reverseGeocode($lat,$lng) {
- global $cloudmadeAPIkey;
- $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=".$lat.",".$lng."&distance=closest&object_type=road";
- $contents = json_decode(getPage($url));
- return $contents->features[0]->properties->name;
-}
-
-function startsWith($haystack,$needle,$case=true) {
- if($case){return (strcmp(substr($haystack, 0, strlen($needle)),$needle)===0);}
- return (strcasecmp(substr($haystack, 0, strlen($needle)),$needle)===0);
-}
-
-function endsWith($haystack,$needle,$case=true) {
- if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);}
- return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);
-}
-function bracketsMeanNewLine($input) {
- return str_replace(")","",str_replace("("," ",$input));
-}
-
-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) {
- $points = viaPoints($tripid,$stopid,true);
- $pointNames = Array();
- foreach ($points as $point) {
- $pointNames[] = $point['name'];
- }
- return implode(", ",$pointNames);
-}
-
-function timePlaceSettings($geolocate = false) {
- global $service_periods;
- $geoerror = false;
- if ($geolocate == true) {
- $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat'])
- || $_SESSION['lat'] == "" || $_SESSION['lon'] == "";
- }
- if ($geoerror) {
- echo '
Sorry, but your location could not currently be detected.
- Please allow location permission, wait for your location to be detected,
- or enter an address/co-ordinates in the box below.