TileManager, pass params for min/max zoom-level and cache size in constructor

This commit is contained in:
Hannes Janetzek
2013-07-23 21:36:43 +02:00
parent 419c83e88d
commit e29c36d6e7
4 changed files with 17 additions and 18 deletions

View File

@@ -23,6 +23,8 @@ import org.oscim.view.MapView;
public abstract class TileLayer<T extends TileLoader> extends Layer {
//private final static String TAG = TileLayer.class.getName();
private final static int MAX_ZOOMLEVEL = 17;
private final static int MIN_ZOOMLEVEL = 2;
private final static int CACHE_LIMIT = 250;
protected final TileManager mTileManager;
protected final TileRenderLayer mRenderLayer;
@@ -33,15 +35,15 @@ public abstract class TileLayer<T extends TileLoader> extends Layer {
protected boolean mInitial = true;
public TileLayer(MapView mapView) {
this(mapView, MAX_ZOOMLEVEL);
this(mapView, MIN_ZOOMLEVEL, MAX_ZOOMLEVEL, CACHE_LIMIT);
}
public TileLayer(MapView mapView, int maxZoom) {
public TileLayer(MapView mapView, int minZoom, int maxZoom, int cacheLimit) {
super(mapView);
// TileManager responsible for adding visible tiles
// to load queue and managing in-memory tile cache.
mTileManager = new TileManager(mapView, this, maxZoom);
mTileManager = new TileManager(mapView, this, minZoom, maxZoom, cacheLimit);
// Instantiate TileLoader threads
mTileLoader = new ArrayList<T>();

View File

@@ -38,12 +38,11 @@ import org.oscim.view.MapViewPosition;
* 'renderer' -> tilemap? - make it general for reuse in tile-overlays
*/
public class TileManager {
private static final int CACHE_TILES_MAX = 250;
static final String TAG = TileManager.class.getName();
private final static int MIN_ZOOMLEVEL = 2;
private final int mMaxZoom;
private int mCacheLimit;
private int mMinZoom;
private int mMaxZoom;
// limit number tiles with new data not uploaded to GL
// TODO this should depend on the number of tiles displayed
@@ -113,15 +112,18 @@ public class TileManager {
private final float[] mMapPlane = new float[8];
private final TileLayer<?> mTileLayer;
public TileManager(MapView mapView, TileLayer<?> tileLayer, int maxZoom) {
public TileManager(MapView mapView, TileLayer<?> tileLayer, int minZoom, int maxZoom, int cacheLimit) {
mMapView = mapView;
mTileLayer = tileLayer;
mMaxZoom = maxZoom;
mMinZoom = minZoom;
mCacheLimit = cacheLimit;
mMapViewPosition = mapView.getMapViewPosition();
jobQueue = new JobQueue();
mJobs = new ArrayList<MapTile>();
mTiles = new MapTile[CACHE_TILES_MAX];
mTiles = new MapTile[mCacheLimit];
mTilesSize = 0;
mTilesForUpload = 0;
@@ -196,7 +198,7 @@ public class TileManager {
// load some tiles more than currently visible (* 0.75)
double scale = pos.scale * 0.9f;
int tileZoom = FastMath.clamp(pos.zoomLevel, MIN_ZOOMLEVEL, mMaxZoom);
int tileZoom = FastMath.clamp(pos.zoomLevel, mMinZoom, mMaxZoom);
if (mZoomTable != null) {
int match = 0;
@@ -276,7 +278,7 @@ public class TileManager {
mJobs.clear();
/* limit cache items */
int remove = mTilesCount - CACHE_TILES_MAX;
int remove = mTilesCount - mCacheLimit;
if (remove > CACHE_THRESHOLD ||
mTilesForUpload > MAX_TILES_IN_QUEUE)

View File

@@ -39,7 +39,7 @@ public class BitmapTileLayer extends TileLayer<TileLoader> {
final TileSource mTileSource;
public BitmapTileLayer(MapView mapView, TileSource tileSource) {
super(mapView, tileSource.getZoomLevelMax());
super(mapView, tileSource.getZoomLevelMin(), tileSource.getZoomLevelMax(), 100);
mTileSource = tileSource;
}