Problema con gran cantidad de marcadores en el mapa

Estoy trabajando en una aplicación de Android que ya existe en iPhone.

En la aplicación, hay una actividad de Mapa que tiene (conté) alrededor de 800 marcadores en cuatro grupos marcados por dibujables en cuatro colores diferentes. Cada grupo se puede activar o desactivar. Información sobre los marcadores que tengo dentro de la Lista. Creo un mapa de superposición para cada grupo, luego adjunto esa superposición al mapa. Creo firmemente que la parte de codificación lo hice correctamente. Pero adjuntaré mi código de todos modos ...

La cosa es que mi Nexus One no puede manejar el mapa con todos esos marcadores. Se necesitan alrededor de 15 segundos para dibujar 500 marcadores. Luego, cuando todo está dibujado, el mapa no es tan suave. Es difícil hacer zoom y navegar. Se puede hacer, pero la experiencia es mala y me gustaría ver si se puede hacer algo allí. Sé que si evito la conversión de Cadena> Doble, podría ahorrar algo de tiempo, pero dudo que eso sea significativo.

Parece que el iPhone no tiene problemas para mostrar todos estos marcadores. Tarda aproximadamente de 1 a 2 segundos en mostrarlos y hacer zoom y paneo no es tan malo. Disminuir la velocidad es notable pero aún aceptable. Personalmente, creo que no es bueno dibujar todos esos marcadores, pero la aplicación está diseñada por otra persona y no se supone que haga cambios drásticos.

No estoy seguro de qué hacer aquí. Parece que tendré que encontrar diferentes funcionalidades, tal vez usar la ubicación GPS, si se conoce, y dibujar solo marcadores dentro de un radio, o, si la ubicación no se conoce, usar el centro de la pantalla (mapa) y dibujar marcadores alrededor de eso. Tendré que tener una explicación razonable para mis jefes en caso de que haga estos cambios.

Agradezco si alguien tiene idas.

Y el codigo:

    List<Overlay> mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.pin_blue);
    drawable = this.getResources().getDrawable(R.drawable.pin_blue);
    ArrList = appState.GetSleepArrList();
    ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable, this); 
    ...
    ...
       for (int m = 0; m < ArrList.size(); m++) {
            tName = ArrList.get(m).get("name").toString();
            tId = ArrList.get(m).get("id").toString();
            tLat = ArrList.get(m).get("lat").toString();;
            tLng = ArrList.get(m).get("lng").toString();;
            try {
                lat = Double.parseDouble(tLat);
                lng = Double.parseDouble(tLng);
                p1 = new GeoPoint(
                        (int) (lat * 1E6), 
                        (int) (lng * 1E6));
                OverlayItem overlayitem = new OverlayItem(p1, tName, tId);
                itemizedoverlay.addOverlay(overlayitem);
            } catch (NumberFormatException e) {
                Log.d(TAG, "NumberFormatException" + e);    
            }
        }
        mapOverlays.add(itemizedoverlay);
        mapView.postInvalidate();

................................

public class ItemizedOverlay extends ItemizedOverlay<OverlayItem>
{
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    private Context mContext;
    public HelloItemizedOverlay(Drawable defaultMarker, Context context)
    {
        super(boundCenterBottom(defaultMarker));
        mContext = context;
    }

    public void addOverlay(OverlayItem overlay)
    {
        mOverlays.add(overlay);
        populate();
    }
    @Override
    protected OverlayItem createItem(int i)
    {
        return mOverlays.get(i);
    }
    @Override
    public int size()
    {
        return mOverlays.size();
    }
    @Override
    protected boolean onTap(int index)
    {
        final OverlayItem item = mOverlays.get(index);
                    ... EACH MARKER WILL HAVE ONCLICK EVENT THAT WILL PRODUCE CLICABLE 
                    ... BALOON WITH MARKER'S NAME.          
        return true;
    }       
}    

Respuestas a la pregunta(3)

Su respuesta a la pregunta