Calcular el nivel de zoom para Google Map para dos valores de LatLong

Estoy usando com.google.android.gms.maps.GoogleMap en SherlockFragmentActivity .

El código XML es el siguiente:

  <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="fill_parent" android:layout_height="150dip" /> 

int zoomLevel = ? // Cómo puedo calcular el nivel de zoom para dos diferentes valores latlong como android map v3 necesita decir nivel de zoom como int

 map.setZoom(zoomLevel); 

Tengo valores de inicio y destino como com.google.android.gms.maps.model.LatLng

LatLng inicio, fin;

Estoy agregando un pligon como GoogleLocation.addPolyLineOnGMap(mMap, startPoint, endPoint, startMarker, endMarker)

Mi problema es cómo puedo calcular el nivel de zoom para el mapa de Google para que pueda mostrar ambos marcador correctamente en el mapa.

Use LatLngBounds.Builder añadir todos los límites en él y construirlo, a continuación, crear el objeto CameraUpdate y pasar los límites en él updatefactory con relleno. Utilice este objeto CameraUpdate para animar la cámara del mapa.

 LatLngBounds.Builder builder = new LatLngBounds.Builder(); for (Marker m : markers) { builder.include(m.getPosition()); } LatLngBounds bounds = builder.build(); int padding = ((width * 10) / 100); // offset from edges of the map // in pixels CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding); mMap.animateCamera(cu); 

Para mí, necesito calcular el acercamiento para la disposición inicial del mapa por GoogleMapOptions , así que usar LatLngBounds.Builder no trabajaría y no optimized. Así es como calculo el zoom basado en las coordenadas noreste y suroeste de una ciudad

Es la referencia aquí y esta respuesta , simplemente puede poner el código a continuación en su clase de ayuda:

 final static int GLOBE_WIDTH = 256; // a constant in Google's map projection final static int ZOOM_MAX = 21; public static int getBoundsZoomLevel(LatLng northeast,LatLng southwest, int width, int height) { double latFraction = (latRad(northeast.latitude) - latRad(southwest.latitude)) / Math.PI; double lngDiff = northeast.longitude - southwest.longitude; double lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360; double latZoom = zoom(height, GLOBE_WIDTH, latFraction); double lngZoom = zoom(width, GLOBE_WIDTH, lngFraction); double zoom = Math.min(Math.min(latZoom, lngZoom),ZOOM_MAX); return (int)(zoom); } private static double latRad(double lat) { double sin = Math.sin(lat * Math.PI / 180); double radX2 = Math.log((1 + sin) / (1 - sin)) / 2; return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2; } private static double zoom(double mapPx, double worldPx, double fraction) { final double LN2 = .693147180559945309417; return (Math.log(mapPx / worldPx / fraction) / LN2); } 

Creando LatLng simplemente por new LatLng(lat-double, lng-double)

width y height es el tamaño del diseño del mapa en píxeles

  • ¿Cómo logro una animación suave del marcador de ubicación en android en un mapa de google?
  • Cómo dibujar las direcciones de carreteras entre dos geocódigos en android google map v2?
  • Cómo tomar google Maps v2 snapshot?
  • Servicios de Google Play que no funcionan en el emulador de Android API Nivel 11
  • android + google map api v2 + ubicación actual
  • Uso de una clave de API de Google Maps para diferentes aplicaciones de Android
  • Cómo encontrar la distancia (por carretera) entre 2 puntos geo en la aplicación de Android sin utilizar google map direction api?
  • Cómo girar marcador (bus) de acuerdo a la dirección?
  • Pantalla azul en Android Google Maps
  • InfoWindow (Google Maps) captura de un evento de cierre de la ventana
  • ¿Cómo puedo mostrar el texto árabe en google map info-window?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.