52 votes

Android MapView - réglage du zoom automatiquement jusqu'à ce que tous les éléments ItemizedOverlay soient visibles

coder en dur setZoom () dans onCreate () semble très désuet et j'aimerais améliorer l'expérience utilisateur en commençant par laisser MapView régler le zoom jusqu'à ce que tous les GeoPoints / OverlayItems soient visibles sur la carte.

Comment cela peut-il être fait automatiquement?

128voto

Reno Points 22138

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 éviter que certains points ne se trouvent sur les bords (merci Ryan!)

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

2voto

frieza Points 4249

Il n'y a pas de moyen magique pour y parvenir. Je suggère de parcourir tous vos éléments de superposition pour obtenir le centre et la portée de tous ces éléments. Puis définissez le centre et la portée en conséquence pour la carte

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X