5

JSONフィードを介して提供されるマーカーを使用してGoogleマップを設定しています。多数のマーカー(600以上)が関係しているため、markerclustererv3を使用して処理を高速化しました。オプションボタンを介して表示されるマーカーを変更しようとするまで、すべてが正常に機能しています。この機能をラジオボタンに割り当てています:

function activities(markerarray,mapused,actType) {
    for(i in markerarray) {
        if(markerarray[i].activity[actType] == null) {
            markerarray[i].setMap(null);
    }
        else {
            markerarray[i].setMap(mapused);
    }
}
return markerarray;
}

これにより、マーカーが地図に表示されなくなり、実際のGoogleマーカーに対して正常に機能します。ただし、ページの読み込み時に作成されたクラスターを更新する方法がわからないようです。

4

2 に答える 2

6

クラスターを更新するには、メソッドをresetViewport();使用してクラスターを再計算するよりも、まずメソッドを呼び出して非表示にする必要がありますredraw();

マーカーで setMap(null) 関数を使用しても、markerClusterer から登録解除されません。登録を解除するには、removeMarkers(marker, opt_nodraw)またはremoveMarkers(markers, opt_nodraw)関数を使用できます。私の経験から、これらは高価な操作です。opt_nodraw関数を に設定するtrueと、再描画が強制されなくなり、パフォーマンスが向上します。

opt_nodraw最初に一連のマーカーを手動で削除できtrueますresetViewport(); redraw();

于 2011-05-18T08:27:33.577 に答える
1

私は同じ問題を抱えていましたが、ソースコードを読んでいることがわかりました...あなたはできません。

バックグラウンドですべてのアイテムを個別のマーカーとしてキャッシュし、必要に応じてフィルタリングします

    displayItems: function(infilter){
        this.markerCluster.clearMarkers();
        var matches = infilter.matches(this.markers);
        this.markerCluster.addMarkers(matches);

    }

this.markers は私のマーカーのキャッシュであり、 this.markerCluster は私の markerCluster オブジェクトです - どちらもグローバルです。

クラスタを直接編集することはできませんが、addMarker/removeMarker を使用して、markerCluster オブジェクトにマーカーを追加および削除できます。これにより、クラスターからマーカーが削除され、再描画されます。

于 2011-05-17T14:47:07.727 に答える