public void applyAndSync( Bbox bounds, TileFunction<RasterTile> onDelete, TileFunction<RasterTile> onUpdate) { MapViewState viewState = rasterLayer.getMapModel().getMapView().getViewState(); boolean panning = lastViewState == null || viewState.isPannableFrom(lastViewState); if (!panning || isDirty()) { for (RasterTile tile : tiles.values()) { onDelete.execute(tile); } tiles.clear(); tileBounds = null; dirty = false; } lastViewState = rasterLayer.getMapModel().getMapView().getViewState(); if (tileBounds == null || !tileBounds.contains(bounds)) { fetchAndUpdateTiles(bounds, onUpdate); } else { updateTiles(bounds, onUpdate); } }