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 .

  • Obtener usuario actual Ubicación android
  • Maps api v2 android Mi ubicación no funciona en 2.3.3
  • GetLastKnownLocation de NETWORK_PROVIDER en el teléfono devuelve null
  • Android escribe EXIF ​​Latitude y Longitud GPS en JPEG falló
  • ¿Cómo funciona? RequestLocationUpdates () + LocationRequest / Listener
  • La ubicación devuelve 0.0 con WIFI / 3G / 4G en Lollipop 5.0.2
  • Localización de la posición actual en android sin GPS
  • Tiempo de viaje entre dos ubicaciones en Google Map Android API V2
  • ¿En qué país se encuentra actualmente el usuario?
  • Obtener la ubicación actual nombre de la ciudad, android
  • Uso de GoogleApiClient + LocationServices sin actualizar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.