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.

2 Solutions collect form web for “Calcular el nivel de zoom para Google Map para dos valores de LatLong”

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

  • Agregar objeto 3D para asignar y desplazar alrededor de él
  • El logcat de Android está inundado con "W / API de Google Maps para Android: GLHudOverlay obsoleto; Draw (): no-op "
  • Android google maps v2 problemas de rendimiento
  • Cómo implementar google maps búsqueda por dirección en Android?
  • ¿Cómo puedo crear una aplicación de Android en Android Studio que usa Google Maps Api v2?
  • DeslizamientoDirector sobre GoogleMap
  • Android Studio - No se puede volver a cargar la lista de AVD (d: skin)
  • ¿Cómo utilizar Google Maps API v2 con API nivel 10?
  • El marcador del mapa de Google se reemplaza por el rectángulo delimitador en el zoom
  • Hacer algo cuando estoy dentro del radio del círculo
  • Error de Google maps: la posición del marcador no se actualiza después de arrastrar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.