所以我有一个应用程序,其中包含一个带有(数百个)标记的地图。我使用 Google 提供的 markerclusterer.js 来聚集我的标记并使整个事情更容易查看。我正在使用 API V3。
我对这一切都很好。但是我想做的是在markerclusterer完成所有标记的聚类后执行一些操作。我试过自己做,但没有看。
有什么建议么?(我假设这会比我想象的要容易,而且我的大脑只是油炸了)
所以我有一个应用程序,其中包含一个带有(数百个)标记的地图。我使用 Google 提供的 markerclusterer.js 来聚集我的标记并使整个事情更容易查看。我正在使用 API V3。
我对这一切都很好。但是我想做的是在markerclusterer完成所有标记的聚类后执行一些操作。我试过自己做,但没有看。
有什么建议么?(我假设这会比我想象的要容易,而且我的大脑只是油炸了)
我只是想知道同样的事情。我是这样做的:
google.maps.event.addListener(markerClusterer, 'clusteringend', myFunction);
地图“空闲”事件对您有用吗?它应该在 MarkerClusterer 完成后触发(假设您在页面加载时加载 MarkerClusterer)。
似乎没有维护这个库。多年来,它不能与 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);