Obtener el radio del mapa visible en Android
¿Hay alguna manera posible de encontrar el radio del mapa visible desde el punto medio?
- Intervalo de actualización en requestLocationUpdates
- Mantenga el mapa centrado, independientemente de dónde pinche el zoom en android
- Android: ¿Una forma sencilla de hacer una geofence?
- Incompatibilidad de Google Play Services
- ¿Existe una manera de obtener la ubicación de "inicio" y "trabajo" del usuario a través de una API 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
- Android Cómo centrarse en la posición actual
- Servicios de localización de cheques android habilitados con servicios de reproducción localización api
- ¿En qué país se encuentra actualmente el usuario?
- Localización fuera de línea basada en la aplicación Android
- ¿Recordatorio / evento basado en la ubicación de Android?
- ¿Cómo burlar la ubicación durante una presentación en un dispositivo real?
- Ubicación de Google Play No conectado. Llame a connect () y espere a que onConnected () se llame
- Cómo obtener el número de satélites del objeto Ubicación
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);
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 .