Android MapView – Réglage automatique du zoom jusqu’à ce que tous les éléments sélectionnés soient visibles

coder en dur le setZoom () dans onCreate () est très désuet et je voudrais améliorer l’expérience utilisateur en faisant en sorte que MapView définisse le zoom jusqu’à ce que tous les GeoPoints / OverlayItems soient visibles sur la carte.

Comment cela peut-il être fait par magie automatique?

Un peu comme ça

int minLat = Integer.MAX_VALUE; int maxLat = Integer.MIN_VALUE; int minLon = Integer.MAX_VALUE; int maxLon = Integer.MIN_VALUE; for (GeoPoint item : items) { int lat = item.getLatitudeE6(); int lon = item.getLongitudeE6(); maxLat = Math.max(lat, maxLat); minLat = Math.min(lat, minLat); maxLon = Math.max(lon, maxLon); minLon = Math.min(lon, minLon); } mapController.zoomToSpan(Math.abs(maxLat - minLat), Math.abs(maxLon - minLon)); mapController.animateTo(new GeoPoint( (maxLat + minLat)/2, (maxLon + minLon)/2 )); 

edit: Ryan a fait une bonne suggestion: mettre un rembourrage pour que certains points ne se trouvent pas sur les bords (merci Ryan!)

 double fitFactor = 1.5; mapController.zoomToSpan((int) (Math.abs(maxLat - minLat) * fitFactor), (int)(Math.abs(maxLon - minLon) * fitFactor)); 

Il n’y a pas de moyen magique pour y parvenir. Je suggère de parcourir tous vos overlayitems pour obtenir le centre et la scope de tous ces éléments. Ensuite, définissez le centre et mesurez-le en conséquence pour la carte