Digamos que tengo el control mapview en mi aplicación de Android. Si sé que existe un hito en cierta latitud y longitud, ¿cómo puedo determinar si ese hito se puede ver actualmente en la pantalla del usuario? ¿Hay algún método para obtener las coordenadas de las esquinas superior izquierda e inferior derecha del área visible?¿Cómo puedo determinar si se visualiza un punto geográfico en el área actualmente visible?
Respuesta
Puede proyectar GeoPoint a punto y comprobar si se trata de caja (0, ancho de la pantalla) por (0, altura de la pantalla)
Ver: https://developer.android.com/reference/com/google/android/gms/maps/Projection.html
http://developer.android.com/reference/com/google/android/gms/maps/Projection.html para la nueva API de Maps – skyman
Algo como esto hará el truco.
private boolean isCurrentLocationVisible()
{
Rect currentMapBoundsRect = new Rect();
Point currentDevicePosition = new Point();
GeoPoint deviceLocation = new GeoPoint((int) (bestCurrentLocation.getLatitude() * 1000000.0), (int) (bestCurrentLocation.getLongitude() * 1000000.0));
mapView.getProjection().toPixels(deviceLocation, currentDevicePosition);
mapView.getDrawingRect(currentMapBoundsRect);
return currentMapBoundsRect.contains(currentDevicePosition.x, currentDevicePosition.y);
}
bien ya que me llevó algún tiempo para encontrar una solución de trabajo sencilla voy a publicar aquí para todos después de mí;) En su propia subclase de MapView sólo tiene que utilizar el siguiente:
GeoPoint topLeft = this.getProjection().fromPixels(0, 0);
GeoPoint bottomRight = this.getProjection().fromPixels(getWidth(),getHeight());
Eso es todo, entonces se puede obtener a través de las coordenadas
topLeft.getLatitudeE6()/1E6
topLeft.getLongitudeE6()/1E6
y
bottomRight.getLatitudeE6()/1E6
bottomRight.getLongitudeE6()/1E6
Deje de volver a publicar el mismo exacto respuesta a múltiples publicaciones Si son duplicados, márquelos como tales. Si no lo son, adapte su respuesta a la pregunta específica planteada. –
No funcionó. –
unirse a los consejos here, here y here:
Aquí está el código completo de mi CustomMapView:
package net.alouw.alouwCheckin.ui.map;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Pair;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
/**
* @author Felipe Micaroni Lalli ([email protected])
*/
public class CustomMapView extends MapView {
public CustomMapView(Context context, String s) {
super(context, s);
}
public CustomMapView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
public CustomMapView(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i);
}
/**
*
* @return a Pair of two pairs with: top right corner (lat, lon), bottom left corner (lat, lon)
*/
public Pair<Pair<Double, Double>, Pair<Double, Double>> getMapCorners() {
GeoPoint center = getMapCenter();
int latitudeSpan = getLatitudeSpan();
int longtitudeSpan = getLongitudeSpan();
double topRightLat = (center.getLatitudeE6() + (latitudeSpan/2.0d))/1.0E6;
double topRightLon = (center.getLongitudeE6() + (longtitudeSpan/2.0d))/1.0E6;
double bottomLeftLat = (center.getLatitudeE6() - (latitudeSpan/2.0d))/1.0E6;
double bottomLeftLon = (center.getLongitudeE6() - (longtitudeSpan/2.0d))/1.0E6;
return new Pair<Pair<Double, Double>, Pair<Double, Double>>(
new Pair<Double, Double>(topRightLat, topRightLon),
new Pair<Double, Double>(bottomLeftLat, bottomLeftLon));
}
}
- 1. ¿Cómo determinar si una vista es visible en un ListView?
- 2. Cómo determinar si un marcador está visible en Google Maps
- 3. Cómo determinar si una aplicación web se está ejecutando actualmente
- 4. ¿Cómo puedo verificar si actualmente se está visualizando un UIViewController?
- 5. ¿Puedo detectar el área visible del usuario en el navegador?
- 6. ¿Cómo puedo determinar si se gestiona un proceso en C#?
- 7. Punto medio geográfico entre dos coordenadas
- 8. ¿Cómo puedo determinar si se muestra un botón de retroceso?
- 9. ¿Cómo puedo determinar si se implementa un método abstracto?
- 10. ¿Cómo puedo agregar un UIView sobre el área visible de una UITableView?
- 11. ¿Cómo puedo determinar si se tocó un UILabel?
- 12. ¿Cómo puedo determinar si se difiere un objeto jQuery?
- 13. ¿Cómo puedo saber si un UIView está visible y en la pantalla?
- 14. Determinar si una celda de vista de tabla está visible
- 15. Determinar si el contenido de un elemento HTML se desborda
- 16. Mantenga la vista de Android en el área visible si aparece el teclado
- 17. Recorte de polígono: solo área "visible"
- 18. ¿Cómo puedo mostrar un diálogo sobre la actividad actualmente visible en android?
- 19. ¿Cómo puedo determinar si está visible la opción searchResultsTableView de UISearchDisplayController?
- 20. Asp.Net MVC: cómo determinar si se encuentra actualmente en una vista específica
- 21. Cómo comprobar si el elemento se está arrastrando actualmente
- 22. El gráfico de Graphviz no se visualiza
- 23. ¿Cómo puedo determinar si existe un subdirectorio en C#?
- 24. ¿Es posible determinar si el texto en un dbEdit es más largo que lo visible?
- 25. ¿Cómo puedo determinar si intento devolver un error o no?
- 26. jQuery - cómo determinar si un Artículos de ahora visible/en la ventana/por debajo del pliegue
- 27. ¿Cómo puedo determinar si dos polígonos convexos se cruzan?
- 28. ¿Cómo puedo comprobar si un Backbone.View se representa actualmente en DOM?
- 29. ¿Cómo puedo determinar si un archivo es un archivo PDF?
- 30. jQuery niño enésima que es actualmente visible
Consejo, sólo prestar atención a esto: http://stackoverflow.com/questions/ 2667386/mapview-getlatitudespan-and-getlongitudespan-not-working –