Obtener el radio del mapa visible en Android

¿Hay alguna manera posible de encontrar el radio del mapa visible desde el punto medio?

Mapa de Google

Quiero obtener los lugares cercanos contra el punto central del mapa de una API, y que API requieren lat, lng y radio. Soy capaz de obtener lat y lng desde el punto central, pero no podría encontrar una manera de obtener radio.

Gracias

Para la API de Google Maps para Android, puedes obtener los …

Desde la referencia del mapa, obtenga la Projection de getProjection () . Y,

Se utiliza una proyección para traducir entre la ubicación de la pantalla y las coordenadas geográficas.

Así que desde la proyección, podemos usar getVisibleRegion () , y para obtener la VisibleRegion del mapa, que contiene LatLngBounds , que es una clase que contiene 2 LatLng variables, una para la esquina Noreste del límite y una para el suroeste esquina.

Así que el código debería verse así:

  googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition position) { LatLngBounds bounds = googleMap.getProjection().getVisibleRegion().latLngBounds; LatLng northeast = bounds.northeast; LatLng southwest = bounds.southwest; Context context = getApplicationContext(); CharSequence text = "ne:"+northeast+" sw:"+southwest; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show(); } }); 

= – = – = – = – = – = editar:

Puede ser que yo era demasiado ingenuo, dado sólo el NE y SW puede resolver este problema, pero sólo en el caso especial en el que el usuario no girar el mapa o inclinación para el mapa en 3D.

Así que en su lugar, sólo puede agarrar la VisibleRegion , que proporciona 4 variable, farRight, farLeft, nearRight, nearLeft, cada uno representa 4 conners del área.

Entonces podemos calcular el ancho y la altura del área para que 4 puntos y escoja el más pequeño (bien, alguna vez el ancho puede ser mayor que la altura supongo.)

Y para el cálculo, sólo podemos usar la función Location.distanceBetween(x1,y1,x2,y2,result)

Que hace que el código parezca lo siguiente:

  VisibleRegion visibleRegion = googleMap.getProjection().getVisibleRegion(); LatLng farRight = visibleRegion.farRight; LatLng farLeft = visibleRegion.farLeft; LatLng nearRight = visibleRegion.nearRight; LatLng nearLeft = visibleRegion.nearLeft; float[] distanceWidth = new float[2]; Location.distanceBetween( (farRight.latitude+nearRight.latitude)/2, (farRight.longitude+nearRight.longitude)/2, (farLeft.latitude+nearLeft.latitude)/2, (farLeft.longitude+nearLeft.longitude)/2, distanceWidth ); float[] distanceHeight = new float[2]; Location.distanceBetween( (farRight.latitude+nearRight.latitude)/2, (farRight.longitude+nearRight.longitude)/2, (farLeft.latitude+nearLeft.latitude)/2, (farLeft.longitude+nearLeft.longitude)/2, distanceHeight ); float distance; if (distanceWidth[0]>distanceHeight[0]){ distance = distanceWidth[0]; } else { distance = distanceHeight[0]; } 

Muchas gracias por su respuesta @ ka , me ayudó mucho (incluso se calculó la distancia y la distancia de la misma manera).

Sin embargo, sólo quiero aclarar y mejorar un poco. (Relájese por favor, él puede fácilmente lío usted para arriba: 3).

Porque:

  • FarLeft LatLng objeto que define la esquina izquierda de la cámara.

  • FarRight Objeto LatLng que define la esquina derecha de la cámara.

  • NearLeft LatLng objeto que define la esquina inferior izquierda de la cámara.

  • NearRight LatLng objeto que define la esquina inferior derecha de la cámara.

Hay algunos campos de VisibleRegion contienen los mismos valores:

  • LongLeft.longitude == nearLeft.longitude
  • FarRight.longitude == nearRight.longitude
  • FarLeft.latitude == farRight.latitude
  • NearLeft.latitude == nearRight.latitude

Por lo tanto, podemos reducir algunos cálculos:

 private double calculateVisibleRadius(VisibleRegion visibleRegion) { float[] distanceWidth = new float[1]; float[] distanceHeight = new float[1]; LatLng farRight = visibleRegion.farRight; LatLng farLeft = visibleRegion.farLeft; LatLng nearRight = visibleRegion.nearRight; LatLng nearLeft = visibleRegion.nearLeft; //calculate the distance width (left <-> right of map on screen) Location.distanceBetween( (farLeft.latitude + nearLeft.latitude) / 2, farLeft.longitude, (farRight.latitude + nearRight.latitude) / 2, farRight.longitude, distanceWidth ); //calculate the distance height (top <-> bottom of map on screen) Location.distanceBetween( farRight.latitude, (farRight.longitude + farLeft.longitude) / 2, nearRight.latitude, (nearRight.longitude + nearLeft.longitude) / 2, distanceHeight ); //visible radius is (smaller distance) / 2: return (distanceWidth[0] < distanceHeight[0]) ? distanceWidth[0] / 2 : distanceHeight[0] / 2; } 

Entonces:

 VisibleRegion visibleRegion = googleMap.getProjection().getVisibleRegion(); double visibleRadius = calculateVisibleRadius(visibleRegion); 

Introduzca aquí la descripción de la imagen

Editar: La siguiente respuesta es para Google Maps JavaScript API v3
Unesdoc.unesco.org unesdoc.unesco.org

Creo que la respuesta sería: Sí, usted puede.

Según la documentación , se puede calcular la distancia entre 2 puntos por: computeDistanceBetween(LatLngFrom, LatLngTo)

También puede obtener el límite del mapa mediante el método getBounds() , que se encuentra en la clase google.maps.Map .

  • Clase de actividad principal no encontrada si implementa GooglePlayServicesClient.ConnectionCallbacks / OnConnectionFailedListener
  • Cambiar la ubicación de descarga predeterminada
  • ¿Cómo medir la fuerza de la señal GPS en Android?
  • La API de ubicación más precisa de Android
  • Descubra la velocidad del usuario en android Utilizando GPS
  • Android: Mock Location cambia de nuevo a Original después de unos segundos
  • Maps api v2 android Mi ubicación no funciona en 2.3.3
  • Android - Obtener ubicación sólo una vez
  • Cómo implementar onConnectionFailed () y onDisconnected () para un servicio de ubicación
  • Ubicaciones de Cell Tower - Android
  • Obtener la ubicación actual nombre de la ciudad, android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.