leaflet的tilelayer在最大级别的瓦片后,继续拉取的话,不会让最大级别的瓦片放大,而是加载下一级的瓦片。但是,下一级的瓦片是不存在的。所以,就会出现加载错误(如果设置的加载失败显示的图片,则会显示图片),导致出现灰屏。如果,想要最大级别下,继续拉大,会再放大图片的效果,则可以这样。
首先自定义一个变量unlimited,表示是否启用该效果。然后,重写tilelayer的_removeAllTiles方法:
_removeAllTiles: function () {
/**
* can not zoom unlimited
*/
if(!this.options.unlimited){
for (var key in this._tiles) {
this._removeTile(key);
}
}
}
其实,这里的关键是,当缩放级别时,如果即将缩放的级别大于最大的级别,leaflet会删除之前加载的所有瓦片。
这里我们不这么做,那么leaflet就会继续放大视点。
当然,这里还会出现一个问题,就是图层切换时,依然产生问题,这里我们可以自定义一个tileMaxZoom属性,设置一下。