web-dev-qa-db-fra.com

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? 

42
Tushar Vengurlekar

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, créant ainsi un problème pour moi. Cela marche.

31
Tushar Vengurlekar

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));
}
67
iutinvg

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.

0
charlest