private LatLng calculateClusterPosition() {
   LatLngBounds.Builder builder = LatLngBounds.builder();
   for (DelegatingMarker m : markers) {
     builder.include(m.getPosition());
   }
   return builder.build().getCenter();
 }
 void refresh() {
   int count = markers.size();
   if (count == 0) {
     removeVirtual();
   } else if (count < strategy.getMinMarkersCount()) {
     removeVirtual();
     for (DelegatingMarker m : markers) {
       m.changeVisible(true);
     }
   } else {
     for (DelegatingMarker m : markers) {
       m.changeVisible(false);
     }
     LatLng position = calculateClusterPosition();
     if (virtual == null || lastCount != count) {
       removeVirtual();
       lastCount = count;
       virtual = strategy.createMarker(new ArrayList<Marker>(markers), position);
     } else {
       virtual.setPosition(position);
     }
   }
 }