org.oscim.layers.tile.ZoomLimiter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vtm Show documentation
Show all versions of vtm Show documentation
OpenGL vector map library written in Java - running on Android, iOS, Desktop and within the browser.
/*
* Copyright 2018 Gustl22
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see .
*/
package org.oscim.layers.tile;
public class ZoomLimiter {
private final int mMinZoom;
private final int mMaxZoom;
private final TileManager mTileManager;
/**
* Indicates that layer isn't processed again over zoom limit.
*/
private final int mZoomLimit;
/**
* Layer would avoid rendering tiles over a specific zoom limit.
*/
public ZoomLimiter(TileManager tileManager, int minZoom, int maxZoom, int zoomLimit) {
if (zoomLimit < minZoom || zoomLimit > maxZoom) {
throw new IllegalArgumentException("Zoom limit is out of range");
}
mTileManager = tileManager;
mMinZoom = minZoom;
mMaxZoom = maxZoom;
mZoomLimit = zoomLimit;
}
public void addZoomLimit() {
if (mZoomLimit < mMaxZoom)
mTileManager.addZoomLimit(mZoomLimit);
}
public int getMaxZoom() {
return mMaxZoom;
}
public int getMinZoom() {
return mMinZoom;
}
/**
* Get tile of zoom limit if zoom level is larger than limit.
*/
public MapTile getTile(MapTile t) {
if (t.zoomLevel > mZoomLimit && t.zoomLevel <= mMaxZoom) {
int diff = t.zoomLevel - mZoomLimit;
return mTileManager.getTile(t.tileX >> diff, t.tileY >> diff, mZoomLimit);
}
return t;
}
public TileManager getTileManager() {
return mTileManager;
}
public int getZoomLimit() {
return mZoomLimit;
}
public void removeZoomLimit() {
if (mZoomLimit < mMaxZoom)
mTileManager.removeZoomLimit(mZoomLimit);
}
public interface IZoomLimiter {
/**
* Add zoom limit to tile manager to load these tiles.
*/
void addZoomLimit();
/**
* Remove zoom limit from tile manager.
*/
void removeZoomLimit();
}
}