42 votes

Android: définition du niveau de zoom dans Google Maps pour inclure tous les points de repère

J'essaie de définir le niveau de zoom de Google Maps sous Android de telle sorte qu'il inclue tous les points de ma liste. J'utilise le code suivant.

 int minLatitude = Integer.MAX_VALUE;
int maxLatitude = Integer.MIN_VALUE;
int minLongitude = Integer.MAX_VALUE;
int maxLongitude = Integer.MIN_VALUE;

// Find the boundaries of the item set
// item contains a list of GeoPoints
for (GeoPoint item : items) { 
    int lat = item.getLatitudeE6();
    int lon = item.getLongitudeE6();

    maxLatitude = Math.max(lat, maxLatitude);
    minLatitude = Math.min(lat, minLatitude);
    maxLongitude = Math.max(lon, maxLongitude);
    minLongitude = Math.min(lon, minLongitude);
}
objMapController.zoomToSpan(
    Math.abs(maxLatitude - minLatitude), 
    Math.abs(maxLongitude - minLongitude));
 

cela fonctionne parfois. Cependant, parfois, certains points ne sont pas affichés et je dois ensuite effectuer un zoom arrière pour les afficher. Y a-t-il un moyen de résoudre ce problème?

68voto

iutinvg Points 735

Encore une autre approche avec Android Map API v2:

 private void fixZoom() {
    List<LatLng> points = route.getPoints(); // route is instance of PolylineOptions 

    LatLngBounds.Builder bc = new LatLngBounds.Builder();

    for (LatLng item : points) {
        bc.include(item);
    }

    map.moveCamera(CameraUpdateFactory.newLatLngBounds(bc.build(), 50));
}
 

31voto

Tushar Vengurlekar Points 3169

J'ai découvert la réponse moi-même, le niveau de zoom était correct. J'ai besoin d'ajouter le code suivant pour afficher tous les points à l'écran.

 objMapController.animateTo(new GeoPoint( 
    (maxLatitude + minLatitude)/2, 
    (maxLongitude + minLongitude)/2 )); 
 

Le point central n'était pas aligné correctement, ce qui créait un problème pour moi. Cela marche.

0voto

charlest Points 360

Une partie du problème pourrait être que MIN_VALUE est toujours un nombre positif, mais les latitudes et les longitudes peuvent être des nombres négatifs. Essayez d’utiliser NEGATIVE_INFINITY au lieu de MIN_VALUE.

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