Mapview getLatitudeSpan y getLongitudeSpan no funciona
A veces, cuando intento obtener el lapso Latitude o Longitude de un mapview con getLatitudeSpan () y getLongitudeSpan () obtengo 0 y 360 * 1E6 respectivamente. Esto no sucede siempre, pero es un problema, ¿alguien tiene este problema? ¿Alguna solución? Intenté usar getProjection () también pero consigo el mismo problema. Aquí está el pedazo de código:
MapView mapView = (MapView) findViewById(R.id.mapview); int lat = mapView.getLatitudeSpan(); // sometimes returns 0 int long = mapView.getLongitudeSpan(); // sometimes returns 360*1E6
- Android getLatitude () devuelve latitud geodésica o geocéntrica?
- Offset LatLng por una cierta cantidad de metros en Android
- Cómo obtener la ubicación actual de mi dispositivo
- Cómo obtener el formato E6 de la latitud de longitud para Google Maps en Android
- Cómo obtener lat y largo en evento de toque de google map?
- Ubicación por dirección IP en interiores
- LocationManager.getLastKnownLocation () return null
- Latitud / Longitud y metros
- Obtener Lat Lang de un place_id devuelto por autocompletar lugar api
- Cómo convertir la longitud de la latitud en formato de grado
- ¿Cómo puedo un punto de coordenadas por radio con otro punto de coordenadas y distancia en Km?
- Aplicación de Android que muestra lat largo en textViews
- Android - cómo obtener coordenadas de mapa desde la vista de mapa
Detectaría la condición y programaría su trabajo para intentar otra vez después de algunos cientos milisegundos. AFAIK, esos valores eventualmente estarán disponibles, pero pueden ser bastante temporales-dependientes. En teoría, deberían calcularse después de haber configurado el centro y haber configurado el zoom, pero sospecho que en realidad no se calculan hasta que se MapView
y posiblemente no hasta que se descarguen algunos datos de mapas de Internet.
Por lo tanto, aísle el código que depende de esos intervalos en un método. Llame a ese método de onCreate()
y el AsyncTask
, probablemente como lo está haciendo hoy. Pero, agregue la lógica de detección para encontrar los valores inválidos, y luego llame a postDelayed()
en su MapView
(u otra View
) para invocar su método de nuevo después de unos cientos de milisegundos si los valores no son válidos. También puede ser necesario agregar algún tipo de contador para que no haga esto postDelayed()
cosas indefinidamente.
Esto, por supuesto, es un hack. Pero, con el componente de Google Maps que no es de código abierto, es difícil encontrar algo más sólido.
He pasado por este mismo problema y las soluciones mencionadas anteriormente funciona. Sin embargo, me gustaría presentar una implementación más clara para todos los principiantes por ahí.
Defina una variable de vista para su mapa: private MapView mapView;
Y asigne el mapa:
mapView = (MapView) findViewById(R.id.mapview);
Agregue el siguiente método:
/** * Wait for mapview to become ready. */ private Runnable waitForMapTimeTask = new Runnable() { public void run() { // If either is true we must wait. if(mapView.getLatitudeSpan() == 0 || mapView.getLongitudeSpan() == 360000000) mapView.postDelayed(this, TIME_TO_WAIT_IN_MS); } };
En su onCreate / onResume, agregue lo siguiente antes de llamar a getLatitudeSpan:
mapView.postDelayed(waitForMapTimeTask, TIME_TO_WAIT_IN_MS);
Y eres bueno para ir 🙂
He estado jugando con esto … y tener un mapview en una actividad tabulada … los valores no se inicializan hasta que onResume () … Lo verifiqué poniendo:
final Handler mHandler = new Handler(); mHandler.postDelayed(new Runnable() { @Override public void run() { latSpan = mapView.getLatitudeSpan(); lngSpan = mapView.getLongitudeSpan(); if ((latSpan == 0) && (lngSpan == 360000000)) { count++; System.out.println("here we go again! " + count); mHandler.postDelayed(this, 100); } } }, 100);
En varios lugares … en onCreate () y onStart () irá indefinidamente (hasta que cambie a esa pestaña), en onResume () obtiene los valores correctos inmediatamente.
GetLatitudeSpan y getLongitudeSpan sólo funcionan para darle los tramos para la parte visible del mapa. Así que si los llama en onCreate (), el mapa no siempre se ha visualizado todavía. Llámalos en onStart () en su lugar y deberías estar bien.
- Android – cambia dinámicamente el menú de opciones, pero al inflar desde XML
- No se puede compilar el proyecto en android Gradle: símbolo no válido: 'switch'