MarkerClusterer v3とビューポートマーカー管理の両方を正常にセットアップしました(ビューポートで表示されるマーカーのみを収集するためにajax呼び出しを実行し、マップが「アイドル」の場合は常にそれらをレンダリングします)。
ただし、これらを組み合わせると、ページが最初に読み込まれたときにのみ機能し、その後は機能しないように見えます。
ズームまたはパンすると、最初のクラスターが残り、マップ全体のマーカーはクラスター化されていない状態でレンダリングされますが、以前にクラスター化されたマーカーは残ります。
元のクラスター化されたマーカーは、ズームイン/ズームアウトしても正しく動作しますが、ビューポートの境界が変更されたときに提供される新しいマーカーは、それらに追加またはクラスター化されません。
以下のコード:
function drawMap(swLat, swLng, neLat, neLng){
//Load the map data
$.ajax({
type: "POST",
url: "readMapInfo.php",
cache: false,
data:{S:swLat, W:swLng, N:neLat, E:neLng},
dataType: "xml",
success: function(data) {
if(markerArray.length >0){
for (i in markerArray) {
markerArray[i].setMap(null);
}
drawMarker(data); //takes the info provided and performs "markerArray.push(marker);"
mc = new MarkerClusterer(map, markerArray, clusterOptions);
} else {
drawMarker(data); //takes the info provided and performs "markerArray.push(marker);"
mc = new MarkerClusterer(map, markerArray, clusterOptions);
}
});
}
google.maps.event.addListener(map, 'idle', function() {
bounds = map.getBounds();
sw = bounds.getSouthWest();
ne = bounds.getNorthEast();
swLat = sw.lat();
swLng = sw.lng();
neLat = ne.lat();
neLng = ne.lng();
drawMap(swLat, swLng, neLat, neLng);
});