Títulos incorrectos para marcadores con Google Map Android API v2

Estoy tratando de desarrollar algún algoritmo para agrupar marcadores en el mapa. La cantidad de marcadores mostrados debe depender del nivel de zoom actual. Si muestro un marcador del grupo de 10, quiero establecer su título en "10". El problema es que ahora los marcadores visibles a veces no tienen ningún título, no tengo idea de cómo es posible. Aquí está mi código:

public class MainActivity extends FragmentActivity {
private ArrayList<Marker> markers = new ArrayList<Marker>();
private Bitmap markerImage;
private float oldZoom = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    markerImage = BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher);

    setContentView(R.layout.activity_main);

    final GoogleMap map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
    map.getUiSettings().setMyLocationButtonEnabled(true);
    map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
        @Override
        public void onCameraChange(CameraPosition cameraPosition) {
            if (cameraPosition.zoom != oldZoom) {
                checkMarkers(map);
            }
            oldZoom = cameraPosition.zoom;
        }
    });
    createMarkers(map);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

private void createMarkers(GoogleMap map) {
    double initLat = 48.462740;
    double initLng = 35.039572;
    for (float i = 0; i < 2; i += 0.2) {
        LatLng pos = new LatLng(initLat + i, initLng);
        Marker marker = map.addMarker(new MarkerOptions()
                .position(pos)
                .icon(BitmapDescriptorFactory.fromBitmap(markerImage)));
        markers.add(marker);
    }
    for (float i = 0; i < 2; i += 0.2) {
        LatLng pos = new LatLng(initLat, initLng + i);
        Marker marker = map.addMarker(new MarkerOptions()
                .position(pos)
                .icon(BitmapDescriptorFactory.fromBitmap(markerImage)));
        markers.add(marker);
    }

    initLat = 40.462740;
    initLng = 30.039572;
    for (float i = 0; i < 2; i += 0.2) {
        LatLng pos = new LatLng(initLat + i, initLng + i);
        Marker marker = map.addMarker(new MarkerOptions()
                .position(pos)
                .icon(BitmapDescriptorFactory.fromBitmap(markerImage)));
        markers.add(marker);
    }

}


private void checkMarkers(GoogleMap map) {
    Projection projection = map.getProjection();
    LatLngBounds bounds = map.getProjection().getVisibleRegion().latLngBounds;
    HashMap<Marker, Point> points = new HashMap<Marker, Point>();
    for (Marker marker : markers) {
        if (bounds.contains(marker.getPosition())) {
            points.put(marker, projection.toScreenLocation(marker.getPosition()));
            marker.setVisible(false);
        }
    }
    CheckMarkersTask checkMarkersTask = new CheckMarkersTask();
    checkMarkersTask.execute(points);
}

private class CheckMarkersTask extends AsyncTask<HashMap<Marker, Point>, Void, HashMap<Point, ArrayList<Marker>>> {


    private double findDistance(float x1, float y1, float x2, float y2) {
        return Math.sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
    }

    @Override
    protected HashMap<Point, ArrayList<Marker>> doInBackground(HashMap<Marker, Point>... params) {
        HashMap<Point, ArrayList<Marker>> clusters = new HashMap<Point, ArrayList<Marker>>();
        HashMap<Marker, Point> points = params[0];
        boolean wasClustered;
        for (Marker marker : points.keySet()) {
            Point point = points.get(marker);
            wasClustered = false;
            for (Point existingPoint : clusters.keySet()) {
                if (findDistance(point.x, point.y, existingPoint.x, existingPoint.y) < 25) {
                    wasClustered = true;
                    clusters.get(existingPoint).add(marker);
                    break;
                }
            }
            if (!wasClustered) {
                ArrayList<Marker> markersForPoint = new ArrayList<Marker>();
                markersForPoint.add(marker);
                clusters.put(point, markersForPoint);
            }
        }
        return clusters;
    }

    @Override
    protected void onPostExecute(HashMap<Point, ArrayList<Marker>> clusters) {
        for (Point point : clusters.keySet()) {
            ArrayList<Marker> markersForPoint = clusters.get(point);
            Marker mainMarker = markersForPoint.get(0);
            mainMarker.setTitle(Integer.toString(markersForPoint.size()));
            mainMarker.setVisible(true);
        }
    }

}
}

Como puede ver, todos los marcadores visibles deberían tener título, pero en realidad a menudo no lo tienen. ¿Alguna idea de lo que está mal?

UPD: Acabo de encontrar que si llamo map.clear () y los marcadores leídos en cada CameraChange (en lugar de reemplazar el título y la visibilidad), todo funciona bien. Se ve extraño para mi

Respuestas a la pregunta(1)

Su respuesta a la pregunta