Google Maps v2 que centra y que da vuelta a la posición de la cámara para caber dos marcadores

Estoy luchando cómo hacer un movimiento con la cámara para encajar mis dos marcadores y mantenerlos en el mismo nivel. Así que esto implica modificar el zoom para adaptarlos y girar la cámara para que se ajuste a los marcadores en la misma línea.

Las siguientes dos fotos aclararán mi pregunta:

Estado actualEstado deseado

Así que, lo que he hecho hasta ahora es esto:

public void centerIncidentRouteOnMap(List<LatLng> copiedPoints) { double minLat = Integer.MAX_VALUE; double maxLat = Integer.MIN_VALUE; double minLon = Integer.MAX_VALUE; double maxLon = Integer.MIN_VALUE; for (LatLng point : copiedPoints) { maxLat = Math.max(point.latitude, maxLat); minLat = Math.min(point.latitude, minLat); maxLon = Math.max(point.longitude, maxLon); minLon = Math.min(point.longitude, minLon); } final LatLngBounds bounds = new LatLngBounds.Builder().include(new LatLng(maxLat, maxLon)).include(new LatLng(minLat, minLon)).build(); mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 120)); } 

Pero esto sólo hace que los dos marcadores caben en la pantalla, así que necesito saber cómo girar la cámara con el ángulo correcto para obtener la última foto.

¿Puede alguien ayudarme con esto?

¡Gracias!

En – casi – pseudo-código, pruebe algo parecido:

 CameraPosition cameraPosition = new CameraPosition.Builder() .target(Your_target) // Sets the center of the map .zoom(YourZoom) // Sets the zoom .bearing(Your_Angle) // -90 = west, 90 = east .tilt(Some_Tilt) map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

Para recuperar el ángulo:

 float xDiff = x2 - x1; float yDiff = y2 - y1; return Math.Atan2(yDiff, xDiff) * 180.0 / Math.PI; 

No estoy seguro de cuánto estoy correcto pero estoy compartiendo mi idea.

  1. Encuentre el punto medio (latitud longitud) de dos marcadores

     private LatLng midPoint(double lat1, double long1, double lat2,double long2) { return new LatLng((lat1+lat2)/2, (long1+long2)/2); } 
  2. Calcule el ángulo entre el punto medio y cualquier otra posición del marcador.

     private double angleBteweenCoordinate(double lat1, double long1, double lat2, double long2) { double dLon = (long2 - long1); double y = Math.sin(dLon) * Math.cos(lat2); double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon); double brng = Math.atan2(y, x); brng = Math.toDegrees(brng); brng = (brng + 360) % 360; brng = 360 - brng; return brng; } 
  3. Gire el mapa hasta ese ángulo.

    CameraPosition cameraPosition = new CameraPosition.Builder (). Target (mid2 (lng1, lng1, lat2, lng2)). Zoom (14) .bearing (angleBteweenCoordinate (lat1, lng1, lat2, lng2)).

    mMap.animateCamera (CameraUpdateFactory.newCameraPosition (cameraPosition));

También puede encontrar el cojinete de dos puntos usando Location.distanceBetween . Este método devuelve el cojinete inicial y final. Puedes encontrar cuál es la diferencia entre ellos aquí

  • Cómo agregar valores en google map v2 marcador android?
  • Mostrar barra de herramientas para el marcador de Google Maps automáticamente
  • Cómo centrar el texto en android IconGenerator
  • Cómo crear un marcador de mapa de bits personalizado con Android mapa API v2
  • La vista Google Maps de Google devuelve el error cuando se usa onTap () - Se supone que Alertdialog se muestra
  • Cómo ajustar el tamaño de los iconos de marcadores según el nivel de zoom en Android
  • Cambio de z-index (z-order) de marcador de mapa para Maps V2 en Android
  • Vaciar InfoWindow cuando se hace clic en Marcador
  • GoogleMaps MapView se bloquea enTap en Android?
  • Eliminar marcador anterior y agregar nuevo marcador en Google Map v2
  • Android Google Maps API v2 - cómo cambiar el icono de marcador
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.