goog.provide('ol.renderer.TileLayerRenderer'); goog.require('ol.renderer.LayerRenderer'); goog.require('ol.layer.TileLayer'); goog.require('ol.renderer.Composite'); goog.require('ol.TileSet'); goog.require('ol.Bounds'); goog.require('goog.style'); /** * A single layer renderer that will be created by the composite map renderer. * * @constructor * @param {!Element} container * @param {!ol.layer.Layer} layer * @extends {ol.renderer.LayerRenderer} */ ol.renderer.TileLayerRenderer = function(container, layer) { goog.base(this, container, layer); /** * @type {Array.} */ this.layerResolutions_ = layer.getResolutions(); /** * @type {Array.} */ this.tileOrigin_ = layer.getTileOrigin(); /** * @type {Array.} */ this.tileSize_ = layer.getTileSize(); /** * @type {boolean} */ this.xRight_ = layer.getXRight(); /** * @type {boolean} */ this.yDown_ = layer.getYDown(); /** * @type {number|undefined} * @private */ this.renderedResolution_ = undefined; /** * @type {number|undefined} * @private */ this.renderedTop_ = undefined; /** * @type {number|undefined} * @private */ this.renderedRight_ = undefined; /** * @type {number|undefined} * @private */ this.renderedBottom_ = undefined; /** * @type {number|undefined} * @private */ this.renderedLeft_ = undefined; /** * @type {number|undefined} * @private */ this.renderedZ_ = undefined; }; goog.inherits(ol.renderer.TileLayerRenderer, ol.renderer.LayerRenderer); /** * @param {number} resolution * @return {Array.} */ ol.renderer.TileLayerRenderer.prototype.getPreferredResAndZ_ = function(resolution) { var minDiff = Number.POSITIVE_INFINITY; var candidate, diff, z, r; for (var i=0, ii=this.layerResolutions_.length; i left) || // beyond on the right side (xRight ? x > right : x < right) || // above (yDown ? y < top : y > top) || // below (yDown ? y > bottom : y < bottom); if (prune) { tile = this.renderedTiles_[xyz]; delete this.renderedTiles_[xyz]; this.container_.removeChild(tile.getImg()); } } }; /** * Deal with changes in resolution. * TODO: implement the animation * * @param {ol.Loc} center New center. * @param {number} resolution New resolution. */ ol.renderer.TileLayerRenderer.prototype.changeResolution_ = function(center, resolution) { this.renderedTiles_ = {}; goog.dom.removeChildren(this.container_); }; /** * Get an identifying string for this renderer. * * @export * @returns {string} */ ol.renderer.TileLayerRenderer.getType = function() { // TODO: revisit return "tile"; }; /** * Determine if this renderer type is supported in this environment. * * @export * @return {boolean} This renderer is supported. */ ol.renderer.TileLayerRenderer.isSupported = function() { return true; }; /** * Determine if this renderer can render the given layer. * * @export * @param {ol.layer.Layer} layer The candidate layer. * @return {boolean} This renderer is capable of rendering the layer. */ ol.renderer.TileLayerRenderer.canRender = function(layer) { return layer instanceof ol.layer.TileLayer; }; ol.renderer.Composite.register(ol.renderer.TileLayerRenderer);