Skip to content

Commit ae27ba8

Browse files
committed
add a new option maxAvailableZoom in TileLayer
1 parent efcc5e4 commit ae27ba8

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/layer/tile/TileLayer.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import SpatialReference from '../../map/spatial-reference/SpatialReference';
1414
* @property {Object} [options.spatialReference=null] - TileLayer's spatial reference
1515
* @property {Number[]} [options.tileSize=[256, 256]] - size of the tile image, [width, height]
1616
* @property {Number[]} [options.tileSystem=null] - tile system number arrays
17+
* @property {Number} [options.maxAvailableZoom=null] - Maximum zoom level for which tiles are available. Data from tiles at the maxzoom are used when displaying the map at higher zoom levels.
1718
* @property {Boolean} [options.repeatWorld=true] - tiles will be loaded repeatedly outside the world.
1819
* @property {Boolean} [options.zoomBackground=false] - whether to draw a background of baselayer during or after zooming, false by default
1920
* @property {String} [options.fragmentShader=null] - custom fragment shader, replace <a href="https://github.com/maptalks/maptalks.js/blob/master/src/renderer/layer/tilelayer/TileLayerGLRenderer.js#L8">the default fragment shader</a>
@@ -51,7 +52,9 @@ const options = {
5152
return Browser.webgl ? 'gl' : 'canvas';
5253
})(),
5354

54-
'clipByPitch' : true
55+
'clipByPitch' : true,
56+
57+
'maxAvailableZoom' : null
5558
};
5659

5760
const urlPattern = /\{ *([\w_]+) *\}/g;
@@ -194,6 +197,10 @@ class TileLayer extends Layer {
194197
zoom = Math.round(zoom);
195198
}
196199
}
200+
const maxZoom = this.options['maxAvailableZoom'];
201+
if (!isNil(maxZoom) && zoom > maxZoom) {
202+
zoom = maxZoom;
203+
}
197204
return zoom;
198205
}
199206

test/layer/TileLayerSpec.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,27 @@ describe('TileLayer', function () {
5858
map.addLayer(tile);
5959
});
6060

61+
it('with maxAvailableZoom set', function (done) {
62+
createMap();
63+
var zoom = map.getZoom();
64+
var tile = new maptalks.TileLayer('tile', {
65+
renderer : 'canvas',
66+
urlTemplate : '/resources/tile.png',
67+
maxAvailableZoom : zoom - 1
68+
});
69+
tile.once('layerload', function () {
70+
expect(tile).to.be.painted();
71+
map.removeLayer(tile);
72+
tile.once('layerload', function () {
73+
expect(tile.getTiles().tiles[0].z === zoom - 1).to.be.ok();
74+
expect(tile).to.be.painted();
75+
done();
76+
});
77+
map.addLayer(tile);
78+
});
79+
map.addLayer(tile);
80+
});
81+
6182
it('set tile size', function () {
6283
createMap();
6384
var tile1 = new maptalks.TileLayer('tile', {

0 commit comments

Comments
 (0)