Displays dots on map.
authorStéphane Jacob <sj@m4x.org>
Wed, 18 May 2011 13:09:17 +0000 (15:09 +0200)
committerStéphane Jacob <sj@m4x.org>
Wed, 18 May 2011 13:25:01 +0000 (15:25 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
htdocs/javascript/maps.js
modules/geoloc.php

index 96cf94e..895679c 100644 (file)
@@ -29,6 +29,20 @@ function map_initialize(latitude, longitude)
         mapTypeId: google.maps.MapTypeId.ROADMAP
     };
     var map = new google.maps.Map($('#map_canvas').get(0), myOptions);
+
+    $.xget('map/ajax', function(json_data) {
+        var data = jQuery.parseJSON(json_data);
+        var dots = data.data;
+        var count = dots.length;
+        var markers = [];
+
+        for (var i = 0; i < count; ++i) {
+            var latLng = new google.maps.LatLng(dots[i].latitude, dots[i].longitude);
+            var marker = new google.maps.Marker({'position': latLng});
+            markers.push(marker);
+        }
+        var mc = new MarkerClusterer(map, markers);
+    });
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
index e98d945..5b44c23 100644 (file)
@@ -24,7 +24,8 @@ class GeolocModule extends PLModule
     function handlers()
     {
         return array(
-            'map' => $this->make_hook('map', AUTH_COOKIE),
+            'map'      => $this->make_hook('map',      AUTH_COOKIE),
+            'map/ajax' => $this->make_hook('map_ajax', AUTH_COOKIE)
         );
     }
 
@@ -32,15 +33,26 @@ class GeolocModule extends PLModule
     {
         global $globals;
         $page->changeTpl('geoloc/index.tpl');
+        $page->addJsLink('maps.js');
+        $page->addJsLink('markerclusterer_packed.js');
 
         $map_url = $globals->maps->dynamic_map . '?&sensor=false&v=' . $globals->maps->api_version . '&language=' . $globals->maps->language;
         $page->addJsLink($map_url, false);
-        $page->addJsLink('maps.js');
         $page->assign('pl_extra_header', '<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />');
 
         $page->assign('latitude', 0);
         $page->assign('longitude', 0);
     }
+
+    function handler_map_ajax($page)
+    {
+        $data = XDB::rawFetchAllAssoc('SELECT  latitude, longitude
+                                         FROM  profile_addresses
+                                        WHERE  type = \'home\' AND latitude IS NOT NULL AND longitude IS NOT NULL');
+        $page->jsonAssign('data', $data);
+
+        return PL_JSON;
+    }
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: