【问题标题】:MarkerClusterer not show on mapMarkerClusterer 未显示在地图上
【发布时间】:2012-10-18 11:05:18
【问题描述】:

您好,我尝试将 markerclusterer 添加到我的谷歌地图,但我肯定错过了一些东西,因为标记在地图上,但我看不到集群...

这是我的脚本:

//<![CDATA[

  function initialize() {
  var cluster = [];
  var map = new google.maps.Map(document.getElementById("map_canvas"), {
    center: new google.maps.LatLng(<?php echo get_post_meta($find_CODGEO, 'latitude', true); ?>, <?php echo get_post_meta($find_CODGEO, 'longitude', true); ?>),
    zoom: 14,
    mapTypeId: 'roadmap'
  });
  var mcOptions = {gridSize: 10, maxZoom: 15};

  var infoWindow = new google.maps.InfoWindow;

  downloadUrl("/wp-content/themes/codium-extend/search/search_equipements.php?lat=<?php echo get_post_meta($find_CODGEO, 'latitude', true); ?>&lng=<?php echo get_post_meta($find_CODGEO, 'longitude', true); ?>&type=<?php echo $thematiquematch ; ?>&codgeo=<?php echo $CODGEO ; ?>&radius=50", 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("sous_type");
      var type = markers[i].getAttribute("sous_type_img");
      var offsetLat = markers[i].getAttribute("lat");
      var offsetLng = markers[i].getAttribute("lng");
      var point = new google.maps.LatLng(offsetLat, offsetLng);
      var html = "<b>" + name + "</b> <br/>" + address;
      var icon = 'http://images.commune-mairie.fr/maps/' + type + '.png';
      var marker = new google.maps.Marker({
        map: map,
        position: point,
        icon: 'http://images.commune-mairie.fr/maps/' + type + '.png',
        shadow: icon.shadow
      });
      bindInfoWindow(marker, map, infoWindow, html);

      google.maps.event.addListener(marker, 'click', (function(marker, i) {
                    return function() {
                        infowindow.setContent(markers[i].getAttribute("name"));
                        infowindow.open(map, marker);
                    }
                })(marker, i));
      cluster.push(marker);
    }
    var mc = new MarkerClusterer(map,cluster,mcOptions);


  });

}

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() {}


//]]>

这里有一个活生生的例子http://www.commune-mairie.fr/equipements/lyon-69123/ 感谢您的帮助!

【问题讨论】:

  • 您页面上的代码没有提到我可以看到的 MarkerClusterer。您的问题中的代码中也有很多 JS 错误(尝试使用 JSLint 来识别它们)
  • 对不起,我忘了清理缓存(我刚做了)
  • 您现在可以查看,您将看到此地图的实时版本(没有集群...)
  • 我看到很多集群。在我看来,您可能有重复的标记。
  • 您好 geocodezip 我会尝试清理 XML 文件可能重复的标记是集群不显示的原因...

标签: google-maps markerclusterer


【解决方案1】:

您在循环中执行此操作:

bindInfoWindow(marker, map, infoWindow, html);

          google.maps.event.addListener(marker, 'click', (function(marker, i) {
                        return function() {
                            infowindow.setContent(markers[i].getAttribute("name"));
                            infowindow.open(map, marker);
                        }
                    })(marker, i));

但是你的 bindInfoWindow 函数看起来像这样:

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

因此,您正在复制标记单击事件侦听器。我不确定这是否会导致 MarkerClusterer 出现问题,但无论如何你都应该整理一下。

【讨论】:

  • 确实我删除了第一个 addListener 但仍然没有集群!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
相关资源
最近更新 更多