2

Je développe une application Android et j'utilise Google Maps Android API Utility Library.Android Obtenir les marqueurs qui ne sont pas en cluster

Pour être plus précis, j'utilise la partie cluster de cette bibliothèque. Maintenant à ma question:

Je suis intéressé par les marqueurs qui sont montrés sur la carte mais qui ne sont pas actuellement groupés. J'ai essayé différents trucs mais je ne peux pas m'en passer la tête. La chose qui fonctionne est de sauvegarder tous les éléments de marqueur rendus dans une liste, puis de comparer les positions des marqueurs aux limites latérales de la carte, si les marqueurs sont à l'intérieur des limites de l'écran, les informations des marqueurs seront ajoutées dans une autre liste. pour être affiché plus tard dans une liste. Le problème avec cela est lorsque je fais un zoom arrière, les marqueurs sont toujours dans le tableau renderedPersonItems et apparaîtront dans la liste même si ces marqueurs sont maintenant en cluster. Je ne peux pas effacer renderedPersonItems parce que les marqueurs ne sont restitués qu'une fois dans un cycle de vie. Donc je cherche une solution différente. Voilà ce que je suis arrivé à ce jour:

code dans DefaultClusterRenderer:

@Override 
protected void onBeforeClusterItemRendered(PersonItem personItem, MarkerOptions markerOptions){ 
    markerOptions.title(personItem.personName); 

    if(!renderedPersonItems.contains(personItem)){ 
     renderedPersonItems.add(personItem); 
    } 
} 

Code de l'activité principale:

LatLngBounds personOnScreenBounds = googleMap.getProjection().getVisibleRegion().latLngBounds; 

for(PersonItem person : clusterPersonRenderer.getRenderedPersonItems()){ 
    if(PersonsOnScreenBounds.contains(person.getPosition())){ 
    personMarksOnScreen.add(getPersonObjectWithId(person.personId)); 
    } 
} 

Merci à l'avance!

Répondre

1

Je peux vous recommander une autre bibliothèque d'android-map. Android Maps Extensions https://github.com/mg6maciej/android-maps-extensions

Je l'utilise dans mon application et ça a l'air bien. Il pourrait être difficile de le réimplémenter dans votre application, mais vous pouvez essayer.

Pour résoudre votre problème, vous pouvez faire quelque chose comme ceci:

List<Marker> markers = mMap.getDisplayedMarkers(); 
for (Marker marker : markers) { 
    if(!marker.isCluster()) { 
     // 
    } 
} 
+0

J'ai vérifié cette bibliothèque maintenant et il semble avoir tout ce dont j'ai besoin, maintenant j'ai besoin de trouver du temps pour réécrire mon code, merci! :) – dancii

0

Si vous souhaitez effectuer des tâches différentes que vous pouvez faire différents événements onClick sur les marqueurs clustered et simples:

Cette méthode de gérer les clics sur les articles en cluster

public boolean onClusterClick(Cluster<Person> cluster) { 
    // Show a toast with some info when the cluster is clicked. 
    Toast.makeText(getActivity(), cluster.getSize() + " (including " + itemText + ")", Toast.LENGTH_SHORT).show(); 
    return true; 
} 

Et cette méthode traitera onClick événements si le marqueur n'est pas groupé (a un seul élément)

public boolean onClusterItemClick(Person item) { 
    // Handles events for single markers 
    String text = item.text; 
    return true 
} 
+1

Eh bien, je ne cherche pas préformage différentes tâches de clic dans ce cas. Je cherche seulement les marqueurs qui ne sont pas groupés mais qui sont dans les limites de l'écran. – dancii