使用 MarkerClusterer 進行點聚合,聚合後的叢集標記(Cluster Marker)沒有原本 Marker 的 Label 與 InfoWindow,彷彿被新 Marker 覆蓋。
MarkerClusterer 內部會建立自己的 Marker 代表叢集,**不會自動繼承原始 Marker 的事件與屬性**。
MarkerClusterer.Renderer 介面(或繼承預設渲染器)。render(cluster) 方法中,根據叢集內的原始 Marker 資料,建立自訂 Marker 並綁定 Label/InfoWindow。var clusterer = new BMapLib.MarkerClusterer(map, {
renderer: {
render: function(cluster) {
var count = cluster.getSize();
var markers = cluster.getMarkers();
// 取第一個 marker 的資料作為代表(或自行彙總)
var first = markers[0];
var labelContent = first.getLabel().content;
var infoContent = first.getInfoWindow().getContent();
var mk = new BMap.Marker(cluster.getCenter());
var label = new BMap.Label(labelContent, { offset: new BMap.Size(10, 0) });
mk.setLabel(label);
var infoWin = new BMap.InfoWindow(infoContent);
mk.addEventListener("click", function() {
this.openInfoWindow(infoWin);
});
return mk;
}
}
});
zoomend 事件。百度地圖 JS API 版本差異大,請參考對應版本文件的 MarkerClusterer 選項與事件。