web-dev-qa-db-ja.com

Google MarkerClusterer:特定のズームレベルの下にマーカーをデクラスターしますか?

私はGoogle MarkerClustererを使用しています。マップがズームレベル15を超えるたびに、すべてのマーカーのクラスターを解除します。

設定オプションにmaxZoom設定がありますが、 ドキュメントでは、何をすべきかが明確にされていません

次のように設定しようとしましたが、マップに設定したズームレベルに関係なく、マップはクラスター化されたままです。

    new_mc = new MarkerClusterer(map, newco_markers, {
      maxZoom: 9
    });

私は何か間違ったことをしていますか、オプションが何をすることになっているのかを誤解していますか、またはこれを修正する別の方法はありますか?

20
Richard

いつでも異なるコードを作成することができます。

  • map.getZoom()、
  • marker [i] .setVisible(true)(またはfalse)および
  • google.maps.event.addListener(map、 'zoom_changed'、...

このようなもの:

function show_hide_markers(zoom) {
    var markerVisible;
    for (var i = 0; i < markers.length; i++) {
        if (zoom <= zoomRanges[i][1] && zoom >= zoomRanges[i][0] ) { 
             markerVisible = true
        } else markerVisible = false;

        if (markers[i].getVisible() != markersVisible) {
        markers[i].setVisible(markersVisible);}
    }
}

// ...

google.maps.event.addListener(map, 'zoom_changed', function () {
    show_hide_markers(map.getZoom());
});

最初にマーカー配列を作成します。ズームレベルの範囲は、マーカー配列のインデックスに対応する別の配列に保持できます(ここでは、zoomRanges)。ズームレベルは、マーカー配列の作成に使用された元の配列(リスト)からも取得できます。

この例では、ズーム範囲が各マーカーに個別に割り当てられていますが、2次元配列を使用して、クラスター全体のmarkerVisibleを取得できます。

マーカー数が極端に高くない場合は、それで十分です。おそらく、可視性を設定する代わりに、追加/削除を適用できます。

マーカーマネージャーとは異なり(少なくとも最近のいくつかのケースでは)、これはAPI3 + APIキーが適用されている場合でも機能します。私はこれを昨日/今日行うことを余儀なくされました。

0
darekk