MarkerClusterer完成后的Fire事件

时间:2012-10-03 15:27:06

标签: google-maps google-maps-api-3 markerclusterer

所以我有一个包含带有(几百个)标记的地图的应用程序。我使用Google提供的markerclusterer.js来聚类我的标记,让整个事情更容易看。我正在使用API​​ V3。

我对所有这一切都很好。但我想要做的是当markerclusterer完成聚类所有标记时执行一些操作。我试过自己做但不看。

有什么建议吗? (我假设这比我想象的要容易,我的脑子只是油炸了)

3 个答案:

答案 0 :(得分:5)

我只是想知道同样的事情。我就这样做了:

google.maps.event.addListener(markerClusterer, 'clusteringend', myFunction);

答案 1 :(得分:1)

地图"idle"活动会对您有用吗?它应该在MarkerClusterer完成后触发(假设您在页面加载时加载MarkerClusterer)。

答案 2 :(得分:0)

似乎未维护该库。多年来,它无法与v3正常工作,并且尚未开发解决方案。

因此,我下载了非最小版本,并将其放入正在工作的项目的源代码中。如果您直接在库中进行以下更改,则接受的解决方案仅适用于(对于v3):

在for循环后找到createClusters_函数添加google.maps.event.trigger(this, "clusteringend", this);。因此如下所示:

MarkerClusterer.prototype.createClusters_ = function() {
  if (!this.ready_) {
    return;
  }

  // Get our current map view bounds.
  // Create a new bounds object so we don't affect the map.
  var mapBounds = new google.maps.LatLngBounds(this.map_.getBounds().getSouthWest(),
      this.map_.getBounds().getNorthEast());
  var bounds = this.getExtendedBounds(mapBounds);

  for (var i = 0, marker; marker = this.markers_[i]; i++) {
    if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) {
      this.addToClosestCluster_(marker);
    }
  }
  google.maps.event.trigger(this, "clusteringend", this);
};

现在您可以使用:

google.maps.event.addListener(markerClusterer, 'clusteringend', myFunction);