6

マーカーをクラスターに配置します。

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

そして、私は15個のマーカーを持っています。これらのうち 10 個は、マップ内のクラスターにあります。マーカーがクラスター内にあるかどうかを判断する方法。

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

isInCluster(marker) のような関数を定義して、どのクラスターにも含まれていないマーカーのみでインフォボックスを開く (つまり、5 つのインフォボックスを表示する必要がある)?

4

2 に答える 2

8

MarkerClusterer、マーカーのマップがnullクラスタ内にある場合に に設定し、マップに表示されないようにします。はMarkerClusterer、マーカーのマップをmapクラスター内に存在しなくなった時点に戻します。各マーカーを確認してみてください。

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...

明らかに、マーカーの状態は、ズームイン、ズームアウト、またはその他のビューポートの変更後に変更される可能性が高いため、ビューポートの変更後に再確認する必要があります。

于 2012-05-09T10:58:01.883 に答える
-2

この例http://88.196.132.133/markerclusterer/を見てください。インフォボックスでは正しく機能しません。すべてのマーカー (クラスター外の場合) が常にインフォボックスで表示される必要があります。問題は、ページをロードするときにすべてのインフォボックスが一瞬開くことです。

于 2012-05-10T12:00:03.063 に答える