2011-02-12 5 views
7

Tengo un marcador de clúster que define un rectángulo delimitador que contiene un grupo de marcadores. El clúster tiene un centro (lat, lon), un recuento de marcadores y un tramo de latitud y longitud para calcular los límites.Obtener el nivel de zoom del mapa para los límites dados en Android como en JS Google Maps API: map.getBoundsZoomLevel (bounds)

Google Maps API (JS) tiene una función llamada "getBoundsZoomLevel (bounds)" pero no puedo encontrar un método equivalente en el SDK de Google Maps para Android. ¿Cómo puedo estimar el nivel de zoom para los límites dados (especialmente en diferentes dispositivos con diferentes resoluciones/densidades)?

He planeado que un usuario puede tocar un marcador de clúster y la vista del mapa se centrará en el centro y los límites de ese clúster.

¿Alguien tiene un fragmento de código que funcione o alguna sugerencia para mí?

Gracias de antemano Recuerdos Thorsten.

Respuesta

0

No probé esto pero tal vez funcione para usted. Imagine que tiene un rectángulo (x1, y1) - (x2, y2)

MapController c = mapView.getController(); 
    c.setCenter(new GeoPoint((x1+x2)/2,(y1+y2)/2)); 
    c.zoomToSpan(x2, y2); 
11

Gracias por su respuesta Solvek. Mientras tanto, encontré una solución que me he adaptado un poco y funciona. El método calcula los límites de un conjunto de puntos geográficos, calcula el lapso de estos puntos y finalmente utiliza zoomToSpan y animateTo para el zoom dentro y centrar el área dada:

public static void zoomInBounds(final MapView view, final GeoPoint.. bounds) { 

    int minLat = Integer.MAX_VALUE; 
    int minLong = Integer.MAX_VALUE; 
    int maxLat = Integer.MIN_VALUE; 
    int maxLong = Integer.MIN_VALUE; 

    for (GeoPoint point : bounds) { 
     minLat = Math.min(point.getLatitudeE6(), minLat); 
     minLong = Math.min(point.getLongitudeE6(), minLong); 
     maxLat = Math.max(point.getLatitudeE6(), maxLat); 
     maxLong = Math.max(point.getLongitudeE6(), maxLong); 
    } 

    final MapController controller = view.getController(); 
    controller.zoomToSpan(
         Math.abs(minLat - maxLat), Math.abs(minLong - maxLong)); 
    controller.animateTo(new GeoPoint((maxLat + minLat)/2, 
     (maxLong + minLong)/2)); 
} 
+0

Gracias por la respuesta. Pero a veces zoomToSpan no funciona bien. Hay casos en que algunos de mis marcadores de pin están fuera de límites en la pantalla. ¿Te encuentras con el mismo problema? – Ahmed

+0

sí, consulte los documentos "Intenta ajustar el zoom del mapa de modo que se muestre el intervalo de latitud y longitud dado. Debido a que el zoom solo puede alcanzar niveles discretos, y porque la relación de aspecto del mapa puede no coincidir con la proporción dado, la calidad del ajuste puede variar. Lo único que garantizamos es que, después del zoom, al menos una de la nueva latitud o la nueva longitud estará dentro de un factor de 2 del parámetro correspondiente ". Para mis propósitos acabo de agregar decir 20% a los límites para tener algo de relleno – Dori

1

Ahora se podría enfocar a los límites con .newLatLngBounds() método:

map.animateCamera(CameraUpdateFactory.newLatLngBounds(place.getViewport(), 10)); // 10 is padding 

será mover y hacer zoom a límites dados, por lo que todos visibles en una pantalla (por ejemplo, zoom diferente para la ciudad o país). Funciona perfectamente con la búsqueda de ubicación.

Cuestiones relacionadas