web-dev-qa-db-fra.com

Google MarkerClusterer: des marqueurs de déclassement en dessous d'un certain niveau de zoom?

J'utilise Google MarkerClusterer. Je voudrais déclasser tous les marqueurs chaque fois que la carte dépasse le niveau de zoom 15.

Il y a un paramètre maxZoom dans les options de configuration, mais le la documentation ne précise pas ce qu'il est censé faire .

J'ai essayé de le définir comme suit, mais la carte reste groupée quel que soit le niveau de zoom sur lequel j'ai défini la carte:

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

Suis-je en train de faire quelque chose de mal, ai-je mal compris ce que l'option est censée faire ou existe-t-il un autre moyen de résoudre ce problème?

20
Richard

Vous pouvez toujours écrire un code différent, par exemple combiner

  • map.getZoom (),
  • marqueur [i] .setVisible (vrai) (ou faux) et
  • google.maps.event.addListener (carte, 'zoom_changed', ...

Quelque chose comme ça:

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());
});

Créez d'abord un tableau de marqueurs. Les plages de niveau de zoom peuvent être conservées dans un tableau séparé correspondant en quelque sorte aux index du tableau des marqueurs (zoomRanges ici). Les niveaux de zoom peuvent également être pris à partir du tableau d'origine (liste) utilisé pour créer le tableau de marqueurs.

Dans cet exemple, une plage de zoom est affectée à chaque marqueur individuellement, mais des tableaux bidimensionnels peuvent être utilisés et markerVisible obtenu pour des clusters entiers.

Si le nombre de marqueurs n'est pas extrêmement élevé, il devrait être suffisant. Il est probable que l'ajout/la suppression de culd soit appliqué au lieu de définir la visibilité.

Contrairement au gestionnaire de marqueurs (au moins récemment dans certains cas), cela fonctionne même sous la clé API3 + API appliquée. J'ai été obligé de faire ça hier/aujourd'hui.

0
darekk