javascript - MarkerClusterer kümedeki işaretçi mi?


İşaretleri kümelere yerleştirdim:

var markerClusterer = new MarkerClusterer(map, markers, {
    zoomOnClick : false,
    maxZoom : 13,
    gridSize : 100
});

Ve 15 işaretleyicim var. Bunların 10'u haritada kümeler halinde. Bir işaretleyicinin kümelerin içinde olup olmadığını nasıl belirlerim?

var clusteredMarkers = markerClusterer.getTotalMarkers();
for(i = 0; i < clusteredMarkers.length; i++) {
    if(isInCluster((clusteredMarkers[i])) {
        clusteredMarkers[i].infobox.close();        
    }
}

isInCluster(marker) gibi, infobox'ın yalnızca herhangi bir kümeye ait olmayan marker'larda açık olduğu bir fonksiyon nasıl tanımlanır (yani 5 infobox görünür olmalı)?

Cevap #1

MarkerClusterer, bir marker bir kümenin içindeyse marker'ın haritasını null olarak ayarlayacak, böylece artık haritada görüntülenmeyecek. MarkerClusterer, marker artık bir kümede olmadığında marker'ın haritasını tekrar map olarak ayarlayacaktır. Her bir marker'ınızı kontrol etmeyi deneyebilirsiniz:

var mapOptions = {            // Notice that mapZoom is not set
    center: new google.maps.LatLng( 19, 19 ),
    mapTypeId: google.maps.MapTypeId.ROADMAP };

map = new google.maps.Map( document.getElementById( "map_canvas" ), mapOptions );
var markerClusterer = new MarkerClusterer( map, markers, { ... });

//Whenever the map completes panning or zooming, the function will be called:
google.maps.event.addListener( map, "idle", function() {
    for ( var i = 0; i < markers.length; i++ ) {
        var mrkr = markers[i];
        if ( mrkr.getMap() != null ) {
            mrkr.infobox.open(); 
        }
        else {
            mrkr.infobox.close(); 
        }
    }
}

//Now that map, markerClusterer, and the "idle" event callback are in place,
//set the zoom, which will trigger the "idle" event callback 
//after the zoom activity completes,
map.setZoom( 19 ); //Or whatever is appropriate

//Thereafter, the callback will run after any pan or zoom...

Açıkçası, işaretçilerin durumu yakınlaştırma, uzaklaştırma veya herhangi bir başka görüntüleme alanı değişikliğinden sonra muhtemelen değişecektir, bu yüzden görüntüleme alanı değişikliklerinden sonra bunu tekrar kontrol etmeniz gerekecektir.

Cevap #2

Şu örneğe bakın http://88.196.132.133/markerclusterer/, infobox'larla düzgün çalışmıyor. Tüm işaretçilerin (eğer kümelerin dışındalarsa) her zaman infobox'larla görüntülenmesi gerekiyor. Sorun ayrıca, tüm infobox'ların bir sayfa yüklendiğinde bir anlığına açılması.