2011-03-09 8 views

Respuesta

128

Un poco como esta

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 dio una buena sugerencia: poner un relleno de modo que algunos de los puntos no se encuentran en el bordes (gracias Ryan!)

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

excelente! hacer un cuadrado y acercar al centro –

+1

Gracias ... trabajando .. – Shaiful

+10

Lo uso para dos geopoints, mi ubicación y un punto de interés, y noté que a veces las superposiciones están muy cerca del borde de la pantalla. Para solucionarlo, agregué un 'double fitFactor = 1.5' a' mapController.zoomToSpan ((int) Math.abs (maxLat - minLat) * fitFactor), (int) (Math.abs (maxLon - minLon) * fitFactor)); 'que agrega un buen relleno. –

2

No hay una manera mágica de lograr esto. Sugiero iterar a través de todos sus elementos superpuestos para obtener el centro y el lapso de todos estos elementos. A continuación, establezca el centro y patrón en correspondencia por el mapa

Cuestiones relacionadas