Mapas android carga asincrónica de elementos de superposición
Tengo una vista del mapa con miles de elementos que quiero cargar en él. obviamente no puedo cargarlos todos cuando se crea la vista.
Supongo que tengo que cargarlos asincrónicamente de acuerdo a lo que se muestra en la actualidad.
- Utilizando OnTap (int i) con varias capas de ItemizedOverlay
- ¿Se puede ampliar el tamaño de la superposición con el mapa de google en android?
- Control del tamaño de OverlayItem
- Redibujar / refrescar Itemizedoverlay? (Android / google maps api)
- Android: ¿Cómo configurar imageView como un marcador en google map API android?
¿Cómo puedo cargar sólo los elementos localizados en la parte del mapa que aparece en la pantalla?
- Cómo borrar / restablecer un ItemizedOverlay en Android?
- Cómo mover iconos en un MapView de Android
- El mapa refrescante ItemizedOverlay da ArrayIndexOutOfBoundsException
- Eliminar todas las superposiciones
Utilice AsyncTask para cargar las capas individuales por pantalla. Obtenga el Lat / Long del mapa visible actualmente usando MapView api. En el backend enviarles el lat / largo cuadro delimitador para obtener los elementos que desea. Tan aproximadamente de la memoria sería algo como:
public class LoadMapItems extends AsyncTask<Integer,Integer,List<ItemizedOverlay>> { private MapView view; public LoadMapItems( MapView view ) { this.view = view; } public List<ItemizedOverlay> doInBackground( Integer... params ) { int left = params[0]; int top = params[1]; int right = params[2]; int bottom = params[3]; return convertToItemizedOverlay( someService.loadSomething( left, top, right, bottom ) ); } private List<ItemizedOverlay> convertToItemizedOverlay( List<SomeObject> objects ) { // ... fill this out to convert your back end object to overlay items } public void onPostExecute(List<ItemizedOverlay> items) { List<Overlay> mapOverlays = mapView.getOverlays(); for( ItemizedOverlay item : items ) { mapOverlays.add( item ); } } } // somewhere else in your code you do this: GeoPoint center = someMap.getMapCenter(); new LoadMapItems( someMap ).execute( center.getLongitude() - someMap.getLongitudeSpan() / 2, center.getLatitude() - someMap.getLatitudeSpan() / 2, center.getLongitude() + someMap.getLongitudeSpan() / 2, center.getLatitude() + someMap.getLatitudeSpan() / 2);