2011-03-09 5 views

Odpowiedz

128

Kinda jak ten

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 dał piękny sugestia: umieścić wyściółkę tak, że niektóre miejsca nie leżą na krawędzie (dzięki Ryan!)

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

świetnie! zrobić kwadrat i powiększyć do środka –

+1

Dzięki .. pracy .. – Shaiful

+10

Używam tego do dwóch punktów, mojej lokalizacji i punktu zainteresowania, i zauważyłem czasami, że nakładki są bardzo blisko krawędzi ekranu. Aby to naprawić, dodałem opcję "double fitFactor = 1.5" do "mapController.zoomToSpan ((int) Math.abs (maxLat - minLat) * fitFactor), (int) (Math.abs (maxLon - minLon) * fitFactor)); 'który dodaje ładne wypełnienie. –

2

Nie ma magicznego sposobu, aby to osiągnąć. Proponuję iterować przez wszystkie twoje nakładki, aby uzyskać środek i rozpiętość wszystkich tych elementów. Następnie ustaw centrum i rozpiętość odpowiednio na mapie