Question

J'ai une carte Google configurée avec des marqueurs fournis via un flux JSON. Puisqu'il y a un grand nombre de marqueurs impliqués (plus de 600), j'ai utilisé MarkerCluster V3 pour accélérer les choses. Tout fonctionne bien jusqu'à ce que j'essaie de modifier les marqueurs affichés via des boutons d'option. J'ai cette fonction affectée aux boutons radio:

function activities(markerarray,mapused,actType) {
    for(i in markerarray) {
        if(markerarray[i].activity[actType] == null) {
            markerarray[i].setMap(null);
    }
        else {
            markerarray[i].setMap(mapused);
    }
}
return markerarray;
}

Cela empêchera les marqueurs de s'afficher sur la carte et fonctionne bien pour les marqueurs Google réels. Cependant, je ne semble pas pouvoir trouver comment mettre à jour le cluster qui a été créé lorsque la page est chargée.

Était-ce utile?

La solution

J'ai eu le même problème et d'après ce que je pouvais dire, être la lecture du code source ... vous ne pouvez pas.

Je cache tous les éléments en arrière-plan en tant que marqueurs individuels, filtrez-les lorsque cela est nécessaire

    displayItems: function(infilter){
        this.markerCluster.clearMarkers();
        var matches = infilter.matches(this.markers);
        this.markerCluster.addMarkers(matches);

    }

This.markers est mon cache de marqueurs et ce.markerCluster est mon objet de barre de MarkerC - les deux sont globaux.

Vous ne pouvez pas modifier directement un cluster, mais vous pouvez ajouter et supprimer des marqueurs à l'objet MarkerCluster à l'aide de Addmarker / Removemarker qui à son tour les supprimera d'un cluster et le redessier.

Autres conseils

Afin de mettre à jour un cluster, vous devez d'abord appeler resetViewport(); Méthode pour le cacher qu'utiliser redraw(); Méthode pour recalculer les clusters.

L'utilisation d'une fonction setMap (null) sur un marqueur ne le désinscrivez pas à partir d'un markercluster, pour ne pas vous inscrire, vous pouvez utiliser removeMarkers(marker, opt_nodraw) ou removeMarkers(markers, opt_nodraw) les fonctions. D'après mon expérience, ce sont des opérations coûteuses. Paramètre opt_nodraw fonctionner pour true Forcera aucun redessier qui améliorera la performance.

Vous pouvez d'abord supprimer un tas de marqueurs avec opt_nodraw mis à true et que resetViewport(); redraw(); plus tard manuellement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top