8

ユーザーがいくつかのボタンをクリックしたときにmarkerClustererを非表示/表示しようとしています:

これが私がやろうとしていることです:

    map = new google.maps.Map(document.getElementById("mappa"),mapOptions);
    var marker_tmp = [];
    var markers_tmp = [];
    $.each(json,function(index,value){
        var latLng = new google.maps.LatLng(value.lat,value.lng);
        var marker = new google.maps.Marker({'position': latLng});
        if((value.candidato in markers_tmp)==false){
            markers_tmp[value.name]=[];
        }
        markers_tmp[value.name].push(marker);
    });
    for(var name in markers_tmp){
        markers[name]= new MarkerClusterer(map,markers_tmp[name]);
    }

複数のmarkerClustererを作成し、それぞれが特定の名前に関連付けられています。

したがって、これらの特定の名前に関連付けられたボタンがいくつかあり、そのボタンに関連付けられたマーカークラスターラーを非表示/表示する必要があります。

/*This is the function associated to a button when it is clicked*/
function hide_show_cluster(name,visible){
    var tmp_cluster = markers[name];
    //call a function of markerClusterer (tmp_cluster) to hide/show it
}

私はたくさんのテストをしましたが、誰も私の要求を満たしていません。誰かが私を助けることができますか?ありがとう!

4

3 に答える 3

29

私はこれで午前中ずっと苦労していましたが、幸いなことに私は解決策にたどり着きました。

まず、最新のMarkerClustererPlusバージョンがあることを確認してくださいhttps://github.com/googlemaps/js-marker-clusterer

それならとても簡単です

マーカーを作成するときは、

表示フラグをfalseに設定します。

そして、マーカークラスターを作成するときは、次のようにします。

new MarkerClusterer(map, markers, { ignoreHidden: true });

クラスタラーを表示したい場合は、次のようにします。

for (var it in markers) {
    markers[it].setVisible(true);
}

markerCluster.repaint();

クラスターを非表示にするには:

for (var it in markers) {
    markers[it].setVisible(false);
}

markerCluster.repaint();

お役に立てば幸いです。

于 2013-07-16T18:24:34.373 に答える
4

私は同じケースを持っています、そしてこれは私がそれをする方法です...それが役立つことを願っています

クラスターインスタント

let markerCluster = new MarkerClusterer(map, markers, {
    imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'});

クラスターを非表示にするには:

function hideMarkers() {
    for (let i in markers) {
        markers[i].setMap(null);
    }
    markerCluster.clearMarkers();
}

クラスターを表示するには:

function showMarkers() {
    for (let i in markers) {
        markers[i].setMap(map);
    }
    markerCluster.addMarkers(markers);
}

http://jsfiddle.net/3s6qfzcy/をテストするためのjsfiddleリンクは次のとおりです。

于 2018-02-07T09:15:27.557 に答える
1

たとえば、次のことができます。

  1. ボタンのクリックハンドラーを定義します。
  2. 関数getMarkers()を使用してすべてのマーカーを取得し、結果を変数に保存します(var allMarkers = getMarkers());
  3. マーカーを追加/削除する別の変数を作成します(var currentMarkers = allMarkers);
  4. 各ボタンをクリックすると、currentMarkers変数をループし、関数removeMarker(MARKER_TO_REMOVE)またはaddMarker(MARKER_TO_ADD、true)を使用できます(trueはマップを再描画することです)。
  5. マーカーをループしているときは、それらの情報にアクセスできます(console.log(marker)を実行して、私が話していることを確認してください)。

詳細については、こちらのドキュメントをご覧ください:https ://googlemaps.github.io/js-marker-clusterer/docs/reference.html

于 2013-02-15T13:00:57.073 に答える