2014-07-19 1 views
1

Je fais une application qui trace beaucoup de marqueurs uniques à un fragment de carte (60 marqueurs)/J'utilise une ArrayList pour cela et une boucle for pour les tracer. Le problème que j'ai est que tout en zoomant, la carte est très encombrée, et est laggy. Je veux trouver un moyen de faire disparaître les marqueurs en faisant un zoom arrière, par exemple au niveau 11, et en zoomant à partir de 10. Comment est-ce que je ferais cela?Avoir des marqueurs de carte apparaissent/disparaissent à certains niveaux de zoom

// Get a handle to the xml Map Fragment 
GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

ArrayList<LatLng> tree = new ArrayList<LatLng>() 

tree.add(new LatLng(48.617515, -3.945385)); 
tree.add(new LatLng(49.617515, -3.945385)); 
... //x58 

for (int i = 0; i < camLoc.size(); i++) {  //for loop to add the LatLng data to the array list 
     map.addMarker(new MarkerOptions() 
     .position(camLoc.get(i)));   
} 
} 
+0

mettre à jour vos marqueurs lorsque 'onCameraChanged' est appelé – tyczj

Répondre

2

Google a publié une bibliothèque qui, une fois configurée, regroupera automatiquement les marqueurs lors d'un zoom arrière. Il fait partie de la bibliothèque Google Maps Android API Utility, available here. Vous pouvez trouver le guide d'installation pour le clustering here. J'ai personnellement utilisé cela dans mon application (après des mois d'essayer d'installer d'autres bibliothèques) avec beaucoup de succès. Cependant, il y a un peu de retard lors du regroupement/désencombrement de nombreux éléments (j'ai plus de 1000 éléments sur ma carte, donc vous n'aurez probablement pas le même problème).

Il est important de noter que vous devrez créer une implémentation personnalisée de ClusterItem et transmettre ces objets au clusterer, au lieu de configurer des marqueurs directement via GoogleMap.

Questions connexes