Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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

  • Servicios de Google Play para Android. Localización cliente no actualización ubicación si wifi deshabilitado
  • Ubicaciones de Cell Tower - Android
  • ¿Cómo encontrar la ubicación del usuario usando la torre celular?
  • GetLastKnownLocation de NETWORK_PROVIDER en el teléfono devuelve null
  • Compruebe si la geolocalización ha sido falsificada
  • Android: requestLocationUpdates actualiza la ubicación como máximo cada 45 segundos
  • Iniciar la estrategia de ubicación
  • Cómo serializar para la clase android.location?
  • 3 Solutions collect form web for “Obtener el radio del mapa visible en Android”

    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 .

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.