Невозможно получить правильное информационное окно для кластеров на карте Google - PullRequest
1 голос
/ 30 ноября 2011

Я использую библиотеку MarkerCluster для Google Maps v3 и у меня возникают проблемы с настройкой информационных окон для правильной работы маркеров.

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

Вот код JavaScript:

<script type="text/javascript">
  function initialize() {
    var center = new google.maps.LatLng(37.4419, -122.1419);

      var myOptions = {
        zoom: 3,
        center: new google.maps.LatLng(46.90, -121.00),
        mapTypeControl: true,
        mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
        navigationControl: true,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      }

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

    var infowindow = new google.maps.InfoWindow({ 
        //size: new google.maps.Size(150,150)
        maxWidth: 500,
    });

    var markers = [];

    for (var i = 0; i < businesses.length; i++) {

        var latLng = new google.maps.LatLng(businesses[i].latitude, businesses[i].longitude);

        var contentString = businesses[i].latitude;

        var marker = new google.maps.Marker({
            position: latLng,
            map: map,
            zIndex: Math.round(latLng.lat()*-100000)<<5
        });

        google.maps.event.addListener(marker, 'click', function() {
            infowindow.setContent(contentString); 
            infowindow.open(map,marker);
        });

        markers.push(marker);


    }

    var markerCluster = new MarkerClusterer(map, markers);

  }

  google.maps.event.addDomListener(window, 'load', initialize);
</script>

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

Любая помощь будет признательна.

1 Ответ

4 голосов
/ 30 ноября 2011

У меня были похожие проблемы, которые я исправил, используя закрытие при добавлении прослушивателя событий:

for (var i = 0; i < businesses.length; i++) {

    var latLng = new google.maps.LatLng(businesses[i].latitude, businesses[i].longitude);

    var contentString = businesses[i].latitude.toString();

    var marker = new google.maps.Marker({
        position: latLng,
        map: map,
        zIndex: Math.round(latLng.lat()*-100000)<<5
    });

    google.maps.event.addListener(marker, 'click', (function(marker, contentString) {
      return function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
      };
    })(marker, contentString));      

    markers.push(marker);
}

Надеюсь, это поможет.

...