6

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

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

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

4

3 回答 3

6

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

google.maps.event.addListener(markerClusterer, 'clusteringend', myFunction);
于 2012-10-08T07:38:50.487 回答
1

地图“空闲”事件对您有用吗?它应该在 MarkerClusterer 完成后触发(假设您在页面加载时加载 MarkerClusterer)。

于 2012-10-03T16:07:26.633 回答
0

似乎没有维护这个库。多年来,它不能与 v3 一起正常工作,也没有开发出任何解决方案。

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

google.maps.event.trigger(this, "clusteringend", this);在 for 循环之后找到 createClusters_ 函数。所以它将如下所示:

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

于 2019-03-27T01:32:39.970 回答