Кластерный маркер Google Maps с использованием геокодера

Используя эти данные

   var data = {
  'address': [
    {
      'address': '7970 GLENTIES Ln'
    },
    {
      'address': '8022 Caminito Mallorca'
    },
    {
      'address': '2750 Wheatstone St # 26'
    },
    {
      'address': '335 49th St'
    }  
  ]
};

мне удается пометить их, но я не смог их сгруппировать. ниже кода, который я использую.

var markerArray = [];
  function initialize() {
    geocoder = new google.maps.Geocoder();
    var center = new google.maps.LatLng(37.4419, -122.1419);

    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 3,
      center: center,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    var address;
    var markers = [];
    for (var level in data) {
        for (var i = 0; i < data[level].length; i++) {
       //   var dataPhoto = data.photos[i];
          var dataAdd =  data[level][i];
        //  alert(dataAdd.address);
        geocoder.geocode({ 'address': dataAdd.address}, function(results){            
          var marker  = new google.maps.Marker({
              map: map, 
              position: results[0].geometry.location
          });
         markerArray[i] = marker;         
        });
        }
    }
    var markerCluster = new MarkerClusterer(map, markerArray);
  }

  google.maps.event.addDomListener(window, 'load', initialize);

Как я могу их сгруппировать? кажется, что MarkerClusterer не работает, или я не знаю.


person GianFS    schedule 29.11.2011    source источник


Ответы (2)


Поскольку функция геокодирования является асинхронной, вам необходимо создать кластеризатор маркеров до того, как будут созданы маркеры.

то, что вам нужно сделать, это создать MarkerClusterer до того, как вы начнете геокодирование, а затем вместо добавления в массив маркеров вы можете просто добавить его в MarkerClusterer.

person skarE    schedule 30.11.2011
comment
Я немного запутался в том, что вы хотите, чтобы я сделал. можете ли вы привести пример для этого? - person GianFS; 30.11.2011
comment
Обновление: мне удается сгруппировать их, но проблема возникает снова. Карта Google ограничивает использование goecode сверх лимита запросов. надеюсь, помогите мне с этим - person GianFS; 01.12.2011
comment
Вы не должны геокодировать одни и те же данные каждый раз, когда пользователь загружает страницу. Если ваши данные не меняются часто, геокодируйте их один раз и сохраните на какое-то время. Это приемлемо с условиями обслуживания, вы просто не можете сохранить его навсегда. - person skarE; 07.12.2011

Да, функция геокодирования асинхронна. поэтому вы можете добавить маркер в кластер позже, используя метод addMarker().

var markerCluster = new MarkerClusterer(map, markerArray);
for (var level in data) {
    for (var i = 0; i < data[level].length; i++) {      
      var dataAdd =  data[level][i];
      geocoder.geocode({ 'address': dataAdd.address}, function(results){            
      var marker  = new google.maps.Marker({
          map: map, 
          position: results[0].geometry.location
      });
     markerArray[i] = marker;  
     markerCluster..addMarker(marker);       
    });
    }
}    
person krishna    schedule 29.01.2019