désolé pour mon anglais em> J'ai essayé le J'utilise dans mon application ClusterManager > getMarkerCollection (). GetAmbers () Code> Méloply, mais il renvoie la collection vide. P>
bibliothèque de Google Maps Utility code>. Chaque fois qu'après une rotation de l'écran em> i crée
asynktask code> et dans le fil d'arrière-plan lecture de données de db et ajoutez des éléments à
ClusterManager Code>: P>
clusterManager.cluster();
// cluster manager returns empty collection \|/
markers = clusterManager.getMarkerCollection().getMarkers();
6 Réponses :
J'ai eu le même problème à obtenir tous les marqueurs ou au moins pour obtenir le nombre de marqueurs. Je pense que j'ai trouvé la solution pour obtenir les marqueurs.
J'ai essayé comme vous p> essayez plutôt p> Cette ligne m'a renvoyé des marqueurs mais je ne suis pas sûr que si c'est le résultat que vous / nous voulons. J'ai besoin de vérifier cela. P>
clustermanager.getClusterMarkerCollection (). Getobers (); renvoie des marqueurs uniquement si les marqueurs sont à un niveau de zoom afin que nous puissions les voir sur la carte
Oui, vous avez raison, je découvre que cela ne renvoie que les marqueurs qui apparaissent et non les marqueurs des clusters
remplacer l'un d'entre eux:
OnBeforecLusterItemgrender P>
OnBeforecLusterRendue P>
OnClusterRenderedd P>
OnClusterItemRendered P>
Tout comme P> < Pré> xxx pré>
cluster.getitems () retourne les marqueurs d'un cluster p> p>
Je vais vous donner une bonne solution. Tout d'abord, je vais donner des antécédents. Ensuite, je vous dirai la méthode très simple de modification de votre code.
Contexte: regardons d'abord la mise en œuvre de ClusterManager.Additem à partir du code de la bibliothèque: P>
Collection<ClusterItemImpl> items = clusterManagerAlgorithm.getItems();
Grande solution! Vous avez une faute de frappe: devrait être 'clustermanagalgorithm = nouveau nonhierarchicaldistanceDistanceAngorithm' (vous manquez la première "N" en non hiérarchiqueDistanceAngorithme)
En disant simplement - la méthode de la setalgorithme d'origine enveloppe inévitablement votre algorithme avec une algorithme de mise en cache, ce qui peut être dans certains cas de difficulté car cet algorithme d'emballage obtient automatiquement des clusters également pour un niveau de zoom inférieur et supérieur, ce qui signifie une getClusters (zoom) appel = 3 appels. Ils sont enfilés, je sais, mais juste dire dans les mêmes cas, cela peut ne pas être recherché.
@éthan solution fonctionne. Un autre hack doit utiliser l'API code> code> afin d'accéder au malgorithme code> (comme mention par eThan Malgorithm est l'endroit où votre élément est stocké) champ de REMARQUE: - À l'avenir S'il y a des modifications de nom de champ (c.-à-d. ClusterManager Code> Classe.
Algorithme privé
Cette solution était super pour moi
La réponse de l'Ethan est belle mais vous ne pouvez toujours pas obtenir de marqueur avec elle. Vous devez créer ClusterRenderer personnalisé et l'utiliser pour obtenir marqueur ou clusteritem.
clusterRenderer.getMarker(clusterItem) // returns Marker object for selected cluster item clusterRenderer.getClusterItem(marker) // returns ClusterItem object for selected marker
C'est de loin la seule chose qui fonctionne pour moi, mais cela ne renvoie pas tous les marqueurs. Néanmoins, une boucle simple ferait ce que OP veut. Acclamations
Vous devriez essayer quelque chose comme ceci:
private MyItem mitemfilter; renderer = new MyClusterManagerRender(this, googleMap, clusterManager); clusterManager.setRenderer(renderer); addItems(); private void addItems() { clusterManager.addItem(mitemfilter=new MyItem (19.641936, -99.132669, "food", "Villa Esmeralda, 54910 Fuentes del Valle, Méx.",R.drawable.ic_camaron)); } private void foodfilter(){ renderer.getMarker(mitemfilter).setVisible(false); }
Avez-vous trouvé une solution à votre problème?
clustermanager.getClusterMarkerCollection (). Getobers (); renvoie des marqueurs uniquement si les marqueurs sont à un niveau de zoom afin que nous puissions les voir sur la carte
Étant donné que ClusterManager Méthode Cluster () crée et appelle clustermanager.clustertask () AsynccTask, votre essai d'obtenir les marqueurs juste après l'appel du cluster () est faux. Il semble que lorsque ClusterManager.CrusterTask ait terminé la méthode des appels IT CLUSTERSCHANGED () sur l'objet CLUSTERRENDERER.