【问题标题】:Can't get correct infowindow to appear for clusters in Google map无法在 Google 地图中为集群显示正确的信息窗口
【发布时间】:2013-10-18 22:31:35
【问题描述】:

我正在使用the MarkerCluster library for 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>

我确信这是我一直忽略的简单问题,但我无法确定问题所在。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript google-maps google-maps-api-3 google-maps-markers


    【解决方案1】:

    我有类似的问题,我在添加事件侦听器时使用闭包解决了这些问题:

    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);
    }
    

    我希望这会有所帮助。

    【讨论】:

    • 这似乎摆脱了集群并用单个标记替换它。
    • @bigmike7801 我已经编辑了答案以包含 for 循环。我的关闭有一个错误(因此你只得到一个标记)。将内容设置为纬度也给你带来了问题,所以我添加了 toString()。
    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 2012-03-28
    • 2013-01-07
    • 1970-01-01
    • 2011-02-24
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多