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?
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.
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));
}
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.