TileManager, pass params for min/max zoom-level and cache size in constructor
This commit is contained in:
parent
419c83e88d
commit
e29c36d6e7
@ -16,7 +16,6 @@ package org.oscim.layers.tile.bitmap;
|
||||
|
||||
import java.net.URL;
|
||||
|
||||
import org.oscim.backend.Log;
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.gdx.client.GwtBitmap;
|
||||
@ -36,13 +35,11 @@ import com.google.gwt.user.client.ui.Image;
|
||||
import com.google.gwt.user.client.ui.RootPanel;
|
||||
|
||||
public class BitmapTileLayer extends TileLayer<TileLoader> {
|
||||
private static final int TIMEOUT_CONNECT = 5000;
|
||||
private static final int TIMEOUT_READ = 10000;
|
||||
|
||||
final TileSource mTileSource;
|
||||
|
||||
public BitmapTileLayer(MapView mapView, TileSource tileSource) {
|
||||
super(mapView, tileSource.getZoomLevelMax());
|
||||
super(mapView, tileSource.getZoomLevelMin(), tileSource.getZoomLevelMax(), 100);
|
||||
mTileSource = tileSource;
|
||||
}
|
||||
|
||||
@ -57,7 +54,6 @@ public class BitmapTileLayer extends TileLayer<TileLoader> {
|
||||
|
||||
img.addLoadHandler(new LoadHandler() {
|
||||
public void onLoad(LoadEvent event) {
|
||||
Log.d("sup", "got image " + url);
|
||||
|
||||
Bitmap bitmap = new GwtBitmap(img);
|
||||
tile.layers = new Layers();
|
||||
@ -83,7 +79,6 @@ public class BitmapTileLayer extends TileLayer<TileLoader> {
|
||||
URL url;
|
||||
try {
|
||||
url = mTileSource.getTileUrl(tile);
|
||||
Log.d("sup", "load image " + url);
|
||||
loadImage(tile, url.toString());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
@ -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>();
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user