2012-06-19 2 views
0

Я хочу интегрировать MarkerCluster с моей картой Google, основанной на базе данных, и пытаюсь заставить ее работать.Интеграция MarkerClusterer с управляемой базой данных Google Map V3

Первый пример кода создает карту из базы данных, которая уже имеет несколько маркеров lat/long.

Второй бит кода представляет собой простую версию кластера маркеров.

Как я могу объединить два? Оба являются настройками для V3 api.

<script type="text/javascript"> 
    //<![CDATA[ 

    var customIcons = { 
     restaurant: { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png', 
     shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
     }, 
     bar: { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png', 
     shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
     } 
    }; 

    function load() { 
     var map = new google.maps.Map(document.getElementById("map"), { 
     center: new google.maps.LatLng(47.6145, -122.3418), 
     zoom: 13, 
     mapTypeId: 'roadmap' 
     }); 
     var infoWindow = new google.maps.InfoWindow; 

     // Change this depending on the name of your PHP file 
     downloadUrl("<?php bloginfo('stylesheet_directory'); ?>/phpsqlajax_genxml.php ", function(data) { 
     var xml = data.responseXML; 
     var markers = xml.documentElement.getElementsByTagName("marker"); 
     for (var i = 0; i < markers.length; i++) { 
      var name = markers[i].getAttribute("name"); 
      var address = markers[i].getAttribute("address"); 
      var type = markers[i].getAttribute("type"); 
      var point = new google.maps.LatLng(
       parseFloat(markers[i].getAttribute("lat")), 
       parseFloat(markers[i].getAttribute("lng"))); 
      var html = "<b>" + name + "</b> <br/>" + address; 
      var icon = customIcons[type] || {}; 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon, 
      shadow: icon.shadow 
      }); 
      bindInfoWindow(marker, map, infoWindow, html); 
     } 
     }); 
    } 

    function bindInfoWindow(marker, map, infoWindow, html) { 
     google.maps.event.addListener(marker, 'click', function() { 
     infoWindow.setContent(html); 
     infoWindow.open(map, marker); 
     }); 
    } 

    function downloadUrl(url, callback) { 
     var request = window.ActiveXObject ? 
      new ActiveXObject('Microsoft.XMLHTTP') : 
      new XMLHttpRequest; 

     request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
      request.onreadystatechange = doNothing; 
      callback(request, request.status); 
     } 
     }; 

     request.open('GET', url, true); 
     request.send(null); 
    } 

    function doNothing() {} 

    //]]> 
    </script> 

Пример ниже Маркер Кластер:

var center = new google.maps.LatLng(37.4419, -122.1419); 
var options = { 
    'zoom': 13, 
    'center': center, 
    'mapTypeId': google.maps.MapTypeId.ROADMAP 
}; 

var map = new google.maps.Map(document.getElementById("map"), options); 

var markers = []; 
for (var i = 0; i < 100; i++) { 
    var latLng = new google.maps.LatLng(data.photos[i].latitude, 
     data.photos[i].longitude); 
    var marker = new google.maps.Marker({'position': latLng}); 
    markers.push(marker); 
} 
var markerCluster = new MarkerClusterer(map, markers); 

ответ

2

С большим количеством проб и ошибок и некоторой помощью от @geocodezip:

<script type="text/javascript"> 
    //<![CDATA[ 

    var customIcons = { 
     restaurant: { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png', 
     shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
     }, 
     bar: { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png', 
     shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
     } 
    }; 

    function load() { 
     var cluster = []; 
     var map = new google.maps.Map(document.getElementById("map"), { 
     center: new google.maps.LatLng(47.6145, -122.3418), 
     zoom: 13, 
     mapTypeId: 'roadmap' 
     }); 
var infowindow = new google.maps.InfoWindow(); 

     // Change this depending on the name of your PHP file 
     downloadUrl("<?php bloginfo('stylesheet_directory'); ?>/phpsqlajax_genxml.php ", function(data) { 
     var xml = data.responseXML; 
     var markers = xml.documentElement.getElementsByTagName("marker"); 
     for (var i = 0; i < markers.length; i++) { 
      var name = markers[i].getAttribute("name"); 
      var address = markers[i].getAttribute("address"); 
      var type = markers[i].getAttribute("type"); 
      var point = new google.maps.LatLng(
       parseFloat(markers[i].getAttribute("lat")), 
       parseFloat(markers[i].getAttribute("lng"))); 
      var html = "<b>" + name + "</b> <br/>" + address; 
      var icon = customIcons[type] || {}; 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon, 
      shadow: icon.shadow 
      }); 
      google.maps.event.addListener(marker, 'click', (function(marker, i) { 
         return function() { 
          infowindow.setContent("Info on member here"); 
          infowindow.open(map, marker); 
         } 
        })(marker, i)); 
      cluster.push(marker); 
     } 
     var mc = new MarkerClusterer(map,cluster); 
     }); 
    } 

    function bindInfoWindow(marker, map, infoWindow, html) { 
     google.maps.event.addListener(marker, 'click', function() { 
     infoWindow.setContent(html); 
     infoWindow.open(map, marker); 
     }); 
    } 

    function downloadUrl(url, callback) { 
     var request = window.ActiveXObject ? 
      new ActiveXObject('Microsoft.XMLHTTP') : 
      new XMLHttpRequest; 

     request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
      request.onreadystatechange = doNothing; 
      callback(request, request.status); 
     } 
     }; 

     request.open('GET', url, true); 
     request.send(null); 
    } 

    function doNothing() {} 

    //]]> 
    </script> 
+0

Как я могу получить значки по умолчанию вместо пользовательских? потому что в других примерах, которые используют метод кластера с методом базы данных и методом downloadulll xml, есть примеры этого. – leoarce

+0

Я имею в виду эти значки: https://developers.google.com/maps/documentation/javascript/examples/marker-clustering. все, что можно увеличить, может иметь пользовательские, но при увеличении масштаба я не вижу эти круговые цветные значки, используя ваш пример кода. – leoarce

1

Вы спросили: «Как я могу интегрировать второй пример в первый»?

Порт первый пример API v3, this example, переведенный с помощью руководства Майка Уильямса v2, может помочь.

Затем добавьте clustering и пользовательские инфо-окна (которые у вас есть в вашем втором примере).

+0

Ссылка на вашу карту, где вы имеете проблемы могли бы позволить нам дать вам несколько советов. – geocodezip

+0

Это страница в стадии разработки - http://www.mediwales.com/mapping/test/ – Rob

+0

Просто пытаюсь преобразовать первый бит кода в v3 из api. Кажется, что сейчас не работает, карта просто пуста при использовании учебника google - https://developers.google.com/maps/articles/phpsqlajax_v3 – Rob