diff --git a/externs/olx.js b/externs/olx.js index 1f02f772b9..b31e2388ce 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -5730,90 +5730,6 @@ olx.source.ImageCanvasOptions.prototype.resolutions; olx.source.ImageCanvasOptions.prototype.state; -/** - * @typedef {{attributions: (ol.AttributionLike|undefined), - * logo: (string|olx.LogoOptions|undefined), - * projection: ol.ProjectionLike, - * ratio: (number|undefined), - * renderBuffer: (number|undefined), - * resolutions: (Array.|undefined), - * source: ol.source.Vector, - * style: (ol.style.Style|Array.|ol.StyleFunction|undefined)}} - */ -olx.source.ImageVectorOptions; - - -/** - * Attributions. - * @type {ol.AttributionLike|undefined} - * @api - */ -olx.source.ImageVectorOptions.prototype.attributions; - - -/** - * Logo. - * @type {string|olx.LogoOptions|undefined} - * @api - */ -olx.source.ImageVectorOptions.prototype.logo; - - -/** - * Projection. - * @type {ol.ProjectionLike} - * @api - */ -olx.source.ImageVectorOptions.prototype.projection; - - -/** - * Ratio. 1 means canvases are the size of the map viewport, 2 means twice the - * width and height of the map viewport, and so on. Must be `1` or higher. - * Default is `1.5`. - * @type {number|undefined} - * @api - */ -olx.source.ImageVectorOptions.prototype.ratio; - - -/** - * The buffer around the viewport extent used by the renderer when getting - * features from the vector source for the rendering or hit-detection. - * Recommended value: the size of the largest symbol, line width or label. - * Default is 100 pixels. - * @type {number|undefined} - * @api - */ -olx.source.ImageVectorOptions.prototype.renderBuffer; - - -/** - * Resolutions. If specified, new canvases will be created for these resolutions - * only. - * @type {Array.|undefined} - * @api - */ -olx.source.ImageVectorOptions.prototype.resolutions; - - -/** - * The vector source from which the vector features drawn in canvas elements are - * read. - * @type {ol.source.Vector} - * @api - */ -olx.source.ImageVectorOptions.prototype.source; - - -/** - * Style to use when rendering features to the canvas. - * @type {ol.style.Style|Array.|ol.StyleFunction|undefined} - * @api - */ -olx.source.ImageVectorOptions.prototype.style; - - /** * @typedef {{sources: Array., * operation: (ol.RasterOperation|undefined), diff --git a/src/ol/source/ImageVector.js b/src/ol/source/ImageVector.js deleted file mode 100644 index 71d868d66f..0000000000 --- a/src/ol/source/ImageVector.js +++ /dev/null @@ -1,318 +0,0 @@ -/** - * @module ol/source/ImageVector - */ -import {getUid, inherits} from '../index.js'; -import _ol_dom_ from '../dom.js'; -import _ol_events_ from '../events.js'; -import _ol_events_EventType_ from '../events/EventType.js'; -import _ol_ext_rbush_ from 'rbush'; -import _ol_extent_ from '../extent.js'; -import _ol_render_canvas_ReplayGroup_ from '../render/canvas/ReplayGroup.js'; -import _ol_renderer_vector_ from '../renderer/vector.js'; -import _ol_source_ImageCanvas_ from '../source/ImageCanvas.js'; -import _ol_style_Style_ from '../style/Style.js'; -import _ol_transform_ from '../transform.js'; - -/** - * @deprecated - * @classdesc - * **Deprecated**. Use an `ol.layer.Vector` with `renderMode: 'image'` and an - * `ol.source.Vector` instead. - * - * An image source whose images are canvas elements into which vector features - * read from a vector source (`ol.source.Vector`) are drawn. An - * `ol.source.ImageVector` object is to be used as the `source` of an image - * layer (`ol.layer.Image`). Image layers are rotated, scaled, and translated, - * as opposed to being re-rendered, during animations and interactions. So, like - * any other image layer, an image layer configured with an - * `ol.source.ImageVector` will exhibit this behaviour. This is in contrast to a - * vector layer, where vector features are re-drawn during animations and - * interactions. - * - * @constructor - * @extends {ol.source.ImageCanvas} - * @param {olx.source.ImageVectorOptions} options Options. - * @api - */ -var _ol_source_ImageVector_ = function(options) { - - /** - * @private - * @type {ol.source.Vector} - */ - this.source_ = options.source; - - /** - * @private - * @type {ol.Transform} - */ - this.transform_ = _ol_transform_.create(); - - /** - * @private - * @type {CanvasRenderingContext2D} - */ - this.canvasContext_ = _ol_dom_.createCanvasContext2D(); - - /** - * @private - * @type {ol.Size} - */ - this.canvasSize_ = [0, 0]; - - /** - * Declutter tree. - * @private - */ - this.declutterTree_ = _ol_ext_rbush_(9); - - /** - * @private - * @type {number} - */ - this.renderBuffer_ = options.renderBuffer == undefined ? 100 : options.renderBuffer; - - /** - * @private - * @type {ol.render.canvas.ReplayGroup} - */ - this.replayGroup_ = null; - - _ol_source_ImageCanvas_.call(this, { - attributions: options.attributions, - canvasFunction: this.canvasFunctionInternal_.bind(this), - logo: options.logo, - projection: options.projection, - ratio: options.ratio, - resolutions: options.resolutions, - state: this.source_.getState() - }); - - /** - * User provided style. - * @type {ol.style.Style|Array.|ol.StyleFunction} - * @private - */ - this.style_ = null; - - /** - * Style function for use within the library. - * @type {ol.StyleFunction|undefined} - * @private - */ - this.styleFunction_ = undefined; - - this.setStyle(options.style); - - _ol_events_.listen(this.source_, _ol_events_EventType_.CHANGE, - this.handleSourceChange_, this); - -}; - -inherits(_ol_source_ImageVector_, _ol_source_ImageCanvas_); - - -/** - * @param {ol.Extent} extent Extent. - * @param {number} resolution Resolution. - * @param {number} pixelRatio Pixel ratio. - * @param {ol.Size} size Size. - * @param {ol.proj.Projection} projection Projection; - * @return {HTMLCanvasElement} Canvas element. - * @private - */ -_ol_source_ImageVector_.prototype.canvasFunctionInternal_ = function(extent, resolution, pixelRatio, size, projection) { - - var replayGroup = new _ol_render_canvas_ReplayGroup_( - _ol_renderer_vector_.getTolerance(resolution, pixelRatio), extent, - resolution, pixelRatio, this.source_.getOverlaps(), this.declutterTree_, this.renderBuffer_); - - this.source_.loadFeatures(extent, resolution, projection); - - var loading = false; - this.source_.forEachFeatureInExtent(extent, - /** - * @param {ol.Feature} feature Feature. - */ - function(feature) { - loading = loading || - this.renderFeature_(feature, resolution, pixelRatio, replayGroup); - }, this); - replayGroup.finish(); - - if (loading) { - return null; - } - - if (this.canvasSize_[0] != size[0] || this.canvasSize_[1] != size[1]) { - this.canvasContext_.canvas.width = size[0]; - this.canvasContext_.canvas.height = size[1]; - this.canvasSize_[0] = size[0]; - this.canvasSize_[1] = size[1]; - } else { - this.canvasContext_.clearRect(0, 0, size[0], size[1]); - } - - this.declutterTree_.clear(); - - var transform = this.getTransform_(_ol_extent_.getCenter(extent), - resolution, pixelRatio, size); - replayGroup.replay(this.canvasContext_, transform, 0, {}); - - this.replayGroup_ = replayGroup; - - return this.canvasContext_.canvas; -}; - - -/** - * @inheritDoc - */ -_ol_source_ImageVector_.prototype.forEachFeatureAtCoordinate = function( - coordinate, resolution, rotation, hitTolerance, skippedFeatureUids, callback) { - if (!this.replayGroup_) { - return undefined; - } else { - /** @type {Object.} */ - var features = {}; - var result = this.replayGroup_.forEachFeatureAtCoordinate( - coordinate, resolution, 0, hitTolerance, skippedFeatureUids, - /** - * @param {ol.Feature|ol.render.Feature} feature Feature. - * @return {?} Callback result. - */ - function(feature) { - var key = getUid(feature).toString(); - if (!(key in features)) { - features[key] = true; - return callback(feature); - } - }, null); - return result; - } -}; - - -/** - * Get a reference to the wrapped source. - * @return {ol.source.Vector} Source. - * @api - */ -_ol_source_ImageVector_.prototype.getSource = function() { - return this.source_; -}; - - -/** - * Get the style for features. This returns whatever was passed to the `style` - * option at construction or to the `setStyle` method. - * @return {ol.style.Style|Array.|ol.StyleFunction} - * Layer style. - * @api - */ -_ol_source_ImageVector_.prototype.getStyle = function() { - return this.style_; -}; - - -/** - * Get the style function. - * @return {ol.StyleFunction|undefined} Layer style function. - * @api - */ -_ol_source_ImageVector_.prototype.getStyleFunction = function() { - return this.styleFunction_; -}; - - -/** - * @param {ol.Coordinate} center Center. - * @param {number} resolution Resolution. - * @param {number} pixelRatio Pixel ratio. - * @param {ol.Size} size Size. - * @return {!ol.Transform} Transform. - * @private - */ -_ol_source_ImageVector_.prototype.getTransform_ = function(center, resolution, pixelRatio, size) { - var dx1 = size[0] / 2; - var dy1 = size[1] / 2; - var sx = pixelRatio / resolution; - var sy = -sx; - var dx2 = -center[0]; - var dy2 = -center[1]; - - return _ol_transform_.compose(this.transform_, dx1, dy1, sx, sy, 0, dx2, dy2); -}; - - -/** - * Handle changes in image style state. - * @param {ol.events.Event} event Image style change event. - * @private - */ -_ol_source_ImageVector_.prototype.handleImageChange_ = function(event) { - this.changed(); -}; - - -/** - * @private - */ -_ol_source_ImageVector_.prototype.handleSourceChange_ = function() { - // setState will trigger a CHANGE event, so we always rely - // change events by calling setState. - this.setState(this.source_.getState()); -}; - - -/** - * @param {ol.Feature} feature Feature. - * @param {number} resolution Resolution. - * @param {number} pixelRatio Pixel ratio. - * @param {ol.render.canvas.ReplayGroup} replayGroup Replay group. - * @return {boolean} `true` if an image is loading. - * @private - */ -_ol_source_ImageVector_.prototype.renderFeature_ = function(feature, resolution, pixelRatio, replayGroup) { - var styles; - var styleFunction = feature.getStyleFunction(); - if (styleFunction) { - styles = styleFunction.call(feature, resolution); - } else if (this.styleFunction_) { - styles = this.styleFunction_(feature, resolution); - } - if (!styles) { - return false; - } - var i, ii, loading = false; - if (!Array.isArray(styles)) { - styles = [styles]; - } - for (i = 0, ii = styles.length; i < ii; ++i) { - loading = _ol_renderer_vector_.renderFeature( - replayGroup, feature, styles[i], - _ol_renderer_vector_.getSquaredTolerance(resolution, pixelRatio), - this.handleImageChange_, this) || loading; - } - return loading; -}; - - -/** - * Set the style for features. This can be a single style object, an array - * of styles, or a function that takes a feature and resolution and returns - * an array of styles. If it is `undefined` the default style is used. If - * it is `null` the layer has no style (a `null` style), so only features - * that have their own styles will be rendered in the layer. See - * {@link ol.style} for information on the default style. - * @param {ol.style.Style|Array.|ol.StyleFunction|undefined} - * style Layer style. - * @api - */ -_ol_source_ImageVector_.prototype.setStyle = function(style) { - this.style_ = style !== undefined ? style : _ol_style_Style_.defaultFunction; - this.styleFunction_ = !style ? - undefined : _ol_style_Style_.createFunction(this.style_); - this.changed(); -}; -export default _ol_source_ImageVector_;