3

MarkerClusterer v3とViewport Marker Management(ビューポートで表示可能なマーカーのみを収集し、マップがアイドル状態のときは常にレンダリングするajax呼び出しを実行)を設定しました。Google Maps MarkerClusterer v3とViewport Marker Managementの組み合わせ

しかし、それらを組み合わせると、ページが最初に読み込まれたときに一緒に機能するように見えるだけで、後では表示されません。

ズームやパンを実行すると、初期クラスタは残り、マップ全体のマーカーはクラスタ化されずにレンダリングされますが、以前にクラスタ化されたマーカーは残ります。

元のクラスタ化マーカーは、ズームイン/アウト時でも正しく動作しますが、ビューポートの境界が変更されたときに提供される新しいマーカーは追加されず、クラスター化されません。以下は

コード:問題の

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); 
}); 
+0

こんにちは、私はその古い投稿を知っています。私も同様のことをやろうとしています。あなたはそれで私を助けてくれますか? Thnx – Ravi

答えて

2

あなたの説明が詳細かつ徹底的ですが、また問題(複数可)を示しているページへのURLがあった場合、それは容易になるだろう。もちろん、この特定のシナリオでは不可能かもしれません。それは私が手伝いに亀裂がかかります、言った:

私はあなたのAJAXの成功コールバックの最初にいくつかの追加のクリーンアップコードが必要と考えている:

if(markerArray.length > 0) { 
    // For loop logic is unchanged 
    // It removes the markers from the Map, but leaves them in markerArray 
    for (i in markerArray) { 
     markerArray[i].setMap(null);  
    } 

    // New code to truncate the Array; the markers should be removed 
    markerArray.length = 0; 

    // New code to clear the clusterer; the markers should be removed 
    mc.clearMarkers();   

    // Original line of code unchanged 
    drawMarker(data); //takes the data and performs markerArray.push(marker) 

    // Commented out, because the cluster is cleared each time, not recreated 
    //mc = new MarkerClusterer(map, markerArray, clusterOptions); 

    // New code to refill the cluster, rather than recreate the cluster 
    // The original clusterOptions are retained 
    mc.addMarkers(markerArray); 

} else { 
    // Original line of code unchanged 
    drawMarker(data); //takes the data and performs markerArray.push(marker) 

    // Original line of code unchanged 
    // Necessary here, because the clusterer does not yet exist 
    mc = new MarkerClusterer(map, markerArray, clusterOptions); 
} 

は、私は、これは前方にあなたを移動するのに役立ちます信じています。これで問題が解決した場合、または少なくとも問題が解決した場合はお知らせください。

すぐに解決したら、MarkerClustererPlusをご覧ください。それは質問に記載されています:Is there any way to disable the Marker Clusterer for less than defined marker counts?

+0

完璧、ありがとうございました。 – VikingGoat

+0

問題ありません - 喜んで助けてください - –

関連する問題