UNPKG

openlayers

Version:

Build tools and sources for developing OpenLayers based mapping applications

202 lines (168 loc) 4.82 kB
goog.provide('ol.source.Source'); goog.require('ol'); goog.require('ol.Attribution'); goog.require('ol.Object'); goog.require('ol.proj'); goog.require('ol.source.State'); /** * @classdesc * Abstract base class; normally only used for creating subclasses and not * instantiated in apps. * Base class for {@link ol.layer.Layer} sources. * * A generic `change` event is triggered when the state of the source changes. * * @constructor * @extends {ol.Object} * @param {ol.SourceSourceOptions} options Source options. * @api stable */ ol.source.Source = function(options) { ol.Object.call(this); /** * @private * @type {ol.proj.Projection} */ this.projection_ = ol.proj.get(options.projection); /** * @private * @type {Array.<ol.Attribution>} */ this.attributions_ = ol.source.Source.toAttributionsArray_(options.attributions); /** * @private * @type {string|olx.LogoOptions|undefined} */ this.logo_ = options.logo; /** * @private * @type {ol.source.State} */ this.state_ = options.state !== undefined ? options.state : ol.source.State.READY; /** * @private * @type {boolean} */ this.wrapX_ = options.wrapX !== undefined ? options.wrapX : false; }; ol.inherits(ol.source.Source, ol.Object); /** * Turns various ways of defining an attribution to an array of `ol.Attributions`. * * @param {ol.AttributionLike|undefined} * attributionLike The attributions as string, array of strings, * `ol.Attribution`, array of `ol.Attribution` or undefined. * @return {Array.<ol.Attribution>} The array of `ol.Attribution` or null if * `undefined` was given. */ ol.source.Source.toAttributionsArray_ = function(attributionLike) { if (typeof attributionLike === 'string') { return [new ol.Attribution({html: attributionLike})]; } else if (attributionLike instanceof ol.Attribution) { return [attributionLike]; } else if (Array.isArray(attributionLike)) { var len = attributionLike.length; var attributions = new Array(len); for (var i = 0; i < len; i++) { var item = attributionLike[i]; if (typeof item === 'string') { attributions[i] = new ol.Attribution({html: item}); } else { attributions[i] = item; } } return attributions; } else { return null; } }; /** * @param {ol.Coordinate} coordinate Coordinate. * @param {number} resolution Resolution. * @param {number} rotation Rotation. * @param {number} hitTolerance Hit tolerance in pixels. * @param {Object.<string, boolean>} skippedFeatureUids Skipped feature uids. * @param {function((ol.Feature|ol.render.Feature)): T} callback Feature * callback. * @return {T|undefined} Callback result. * @template T */ ol.source.Source.prototype.forEachFeatureAtCoordinate = ol.nullFunction; /** * Get the attributions of the source. * @return {Array.<ol.Attribution>} Attributions. * @api stable */ ol.source.Source.prototype.getAttributions = function() { return this.attributions_; }; /** * Get the logo of the source. * @return {string|olx.LogoOptions|undefined} Logo. * @api stable */ ol.source.Source.prototype.getLogo = function() { return this.logo_; }; /** * Get the projection of the source. * @return {ol.proj.Projection} Projection. * @api */ ol.source.Source.prototype.getProjection = function() { return this.projection_; }; /** * @abstract * @return {Array.<number>|undefined} Resolutions. */ ol.source.Source.prototype.getResolutions = function() {}; /** * Get the state of the source, see {@link ol.source.State} for possible states. * @return {ol.source.State} State. * @api */ ol.source.Source.prototype.getState = function() { return this.state_; }; /** * @return {boolean|undefined} Wrap X. */ ol.source.Source.prototype.getWrapX = function() { return this.wrapX_; }; /** * Refreshes the source and finally dispatches a 'change' event. * @api */ ol.source.Source.prototype.refresh = function() { this.changed(); }; /** * Set the attributions of the source. * @param {ol.AttributionLike|undefined} attributions Attributions. * Can be passed as `string`, `Array<string>`, `{@link ol.Attribution}`, * `Array<{@link ol.Attribution}>` or `undefined`. * @api */ ol.source.Source.prototype.setAttributions = function(attributions) { this.attributions_ = ol.source.Source.toAttributionsArray_(attributions); this.changed(); }; /** * Set the logo of the source. * @param {string|olx.LogoOptions|undefined} logo Logo. */ ol.source.Source.prototype.setLogo = function(logo) { this.logo_ = logo; }; /** * Set the state of the source. * @param {ol.source.State} state State. * @protected */ ol.source.Source.prototype.setState = function(state) { this.state_ = state; this.changed(); };