Labs Tidy up, depreciate old trip planner tester, promote myway balance/service alerts to main site
[busui.git] / include / common-geo.inc.php
blob:a/include/common-geo.inc.php -> blob:b/include/common-geo.inc.php
--- a/include/common-geo.inc.php
+++ b/include/common-geo.inc.php
@@ -1,60 +1,68 @@
 <?php
 
+/*
+ *    Copyright 2010,2011 Alexander Sadleir 
+
+  Licensed under the Apache License, Version 2.0 (the 'License');
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an 'AS IS' BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ */
 // 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, $zoom = 0, $markerImage = "iconb", $collapsible = true, $twotone = false) {
-    global $basePath;
-    $width = 300;
+function staticmap($mapPoints, $collapsible = true, $twotone = false, $path = false, $numbered = false) {
+
+    $markers = '';
     $height = 300;
-    $metersperpixel[9] = 305.492 * $width;
-    $metersperpixel[10] = 152.746 * $width;
-    $metersperpixel[11] = 76.373 * $width;
-    $metersperpixel[12] = 38.187 * $width;
-    $metersperpixel[13] = 19.093 * $width;
-    $metersperpixel[14] = 9.547 * $width;
-    $metersperpixel[15] = 4.773 * $width;
-    //$metersperpixel[16] = 2.387 * $width;
-    // $metersperpixel[17]=1.193*$width;
-    $center = "";
-    $markers = "";
-    $mapwidthinmeters = 50;
+    $width = $height;
+    $index = 0;
     if (sizeof($mapPoints) < 1)
-        return "map error";
+        return 'map error';
     if (sizeof($mapPoints) === 1) {
-        if ($zoom == 0)
-            $zoom = 14;
-        $markers.= "{$mapPoints[0][0]},{$mapPoints[0][1]},$markerimage";
-        $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}";
-    }
-    else {
+        $markers = 'markers='.$mapPoints[0][0].','.$mapPoints[0][1];
+    } else {
+        if (!$numbered) {
+            $markers = 'markers=';
+        }
+        if ($path) {
+            $markers.= 'markers='.$mapPoints[0][0].','.$mapPoints[0][1].'&amp;path=';
+        }
         foreach ($mapPoints as $index => $mapPoint) {
             if ($twotone && $index == 0) {
-                $markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . "iconr" . ($index + 1);
-                $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}";
+                $markers = 'markerd=color:red|' . $mapPoint[0] . ',' . $mapPoint[1] . '&amp;markers=';
             } else {
-                $markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . $markerImage . ($index + 1);
-            }
-            if ($index + 1 != sizeof($mapPoints))
-                $markers.= "|";
-            $dist = distance($mapPoints[0][0], $mapPoint[0][1], $mapPoint[0], $mapPoint[1]);
-            $mapwidthinmeters = ($dist > $mapwidthinmeters ? $dist : $mapwidthinmeters);
-            $totalLat+= $mapPoint[0];
-            $totalLon+= $mapPoint[1];
-        }
-        if ($zoom == 0) {
-            $mapwidthinmeters = distance($minlat, $minlon, $minlat, $maxlon);
-            foreach (array_reverse($metersperpixel, true) as $zoomLevel => $maxdistance) {
-                if ($zoom == 0 && $mapwidthinmeters * 1.5 < ($maxdistance))
-                    $zoom = $zoomLevel;
+                if ($numbered) {
+                    $label = ($index > 9 ? 9 : $index);
+                    $markers.= 'markers=label:' . $label . '|' . $mapPoint[0] . ',' . $mapPoint[1];
+                    if ($index + 1 != sizeof($mapPoints)) {
+                        $markers.= '&amp;';
+                    }
+                } else {
+                    $markers.= $mapPoint[0] . ',' . $mapPoint[1];
+                    if ($index + 1 != sizeof($mapPoints)) {
+                        $markers.= '|';
+                    }
+                }
+                $index++;
             }
         }
-        $center = $totalLat / sizeof($mapPoints) . "," . $totalLon / sizeof($mapPoints);
     }
-    $output = "";
+    $output = '';
     if ($collapsible)
         $output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>';
-    $output.= '<img class="map" src="' . curPageURL() . '/' . $basePath . '/lib/staticmaplite/staticmap.php?center=' . $center . '&amp;zoom=' . $zoom . '&amp;size=' . $width . 'x' . $height . '&amp;markers=' . $markers . '" width=' . $width . ' height=' . $height . '>';
+    if (isIOSDevice())
+        $output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&amp;' . $markers . '&amp;scale=2&amp;sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">';
+    else
+        $output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&amp;' . $markers . '&amp;scale=1&amp;format=jpg&amp;sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">';
+
     if ($collapsible)
         $output.= '</div>';
     return $output;
@@ -76,7 +84,7 @@
         if ($km < 1)
             return floor($km * 1000);
         else
-            return round($km, 2) . "k";
+            return round($km, 2) . 'k';
     }
     else
         return floor($km * 1000);
@@ -145,22 +153,20 @@
 
 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";
+    $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];
+        return $contents->features[0]->centroid->coordinates[0] . ',' . $contents->features[0]->centroid->coordinates[1];
     else
-        return "";
+        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";
+    $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;
 }
 
-?>
-