import combine from "../Core/combine.js"; import Credit from "../Core/Credit.js"; import defaultValue from "../Core/defaultValue.js"; import defined from "../Core/defined.js"; import deprecationWarning from "../Core/deprecationWarning.js"; import DeveloperError from "../Core/DeveloperError.js"; import Event from "../Core/Event.js"; import Rectangle from "../Core/Rectangle.js"; import Resource from "../Core/Resource.js"; import WebMercatorTilingScheme from "../Core/WebMercatorTilingScheme.js"; import ImageryProvider from "./ImageryProvider.js"; import TimeDynamicImagery from "./TimeDynamicImagery.js"; const defaultParameters = Object.freeze({ service: "WMTS", version: "1.0.0", request: "GetTile", }); /** * @typedef {object} WebMapTileServiceImageryProvider.ConstructorOptions * * Initialization options for the WebMapTileServiceImageryProvider constructor * * @property {Resource|string} url The base URL for the WMTS GetTile operation (for KVP-encoded requests) or the tile-URL template (for RESTful requests). The tile-URL template should contain the following variables: {style}, {TileMatrixSet}, {TileMatrix}, {TileRow}, {TileCol}. The first two are optional if actual values are hardcoded or not required by the server. The {s} keyword may be used to specify subdomains. * @property {string} [format='image/jpeg'] The MIME type for images to retrieve from the server. * @property {string} layer The layer name for WMTS requests. * @property {string} style The style name for WMTS requests. * @property {string} tileMatrixSetID The identifier of the TileMatrixSet to use for WMTS requests. * @property {Array} [tileMatrixLabels] A list of identifiers in the TileMatrix to use for WMTS requests, one per TileMatrix level. * @property {Clock} [clock] A Clock instance that is used when determining the value for the time dimension. Required when `times` is specified. * @property {TimeIntervalCollection} [times] TimeIntervalCollection with its data property being an object containing time dynamic dimension and their values. * @property {object} [dimensions] A object containing static dimensions and their values. * @property {number} [tileWidth=256] The tile width in pixels. * @property {number} [tileHeight=256] The tile height in pixels. * @property {TilingScheme} [tilingScheme] The tiling scheme corresponding to the organization of the tiles in the TileMatrixSet. * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle covered by the layer. * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider. * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used. * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas. * @property {string|string[]} [subdomains='abc'] The subdomains to use for the {s} placeholder in the URL template. * If this parameter is a single string, each character in the string is a subdomain. If it is * an array, each element in the array is a subdomain. */ /** * Provides tiled imagery served by {@link http://www.opengeospatial.org/standards/wmts|WMTS 1.0.0} compliant servers. * This provider supports HTTP KVP-encoded and RESTful GetTile requests, but does not yet support the SOAP encoding. * * @alias WebMapTileServiceImageryProvider * @constructor * * @param {WebMapTileServiceImageryProvider.ConstructorOptions} options Object describing initialization options * * @demo {@link https://sandcastle.cesium.com/index.html?src=Web%20Map%20Tile%20Service%20with%20Time.html|Cesium Sandcastle Web Map Tile Service with Time Demo} * * @example * // Example 1. USGS shaded relief tiles (KVP) * const shadedRelief1 = new Cesium.WebMapTileServiceImageryProvider({ * url : 'http://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS', * layer : 'USGSShadedReliefOnly', * style : 'default', * format : 'image/jpeg', * tileMatrixSetID : 'default028mm', * // tileMatrixLabels : ['default028mm:0', 'default028mm:1', 'default028mm:2' ...], * maximumLevel: 19, * credit : new Cesium.Credit('U. S. Geological Survey') * }); * viewer.imageryLayers.addImageryProvider(shadedRelief1); * * @example * // Example 2. USGS shaded relief tiles (RESTful) * const shadedRelief2 = new Cesium.WebMapTileServiceImageryProvider({ * url : 'http://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS/tile/1.0.0/USGSShadedReliefOnly/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.jpg', * layer : 'USGSShadedReliefOnly', * style : 'default', * format : 'image/jpeg', * tileMatrixSetID : 'default028mm', * maximumLevel: 19, * credit : new Cesium.Credit('U. S. Geological Survey') * }); * viewer.imageryLayers.addImageryProvider(shadedRelief2); * * @example * // Example 3. NASA time dynamic weather data (RESTful) * const times = Cesium.TimeIntervalCollection.fromIso8601({ * iso8601: '2015-07-30/2017-06-16/P1D', * dataCallback: function dataCallback(interval, index) { * return { * Time: Cesium.JulianDate.toIso8601(interval.start) * }; * } * }); * const weather = new Cesium.WebMapTileServiceImageryProvider({ * url : 'https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/AMSR2_Snow_Water_Equivalent/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png', * layer : 'AMSR2_Snow_Water_Equivalent', * style : 'default', * tileMatrixSetID : '2km', * maximumLevel : 5, * format : 'image/png', * clock: clock, * times: times, * credit : new Cesium.Credit('NASA Global Imagery Browse Services for EOSDIS') * }); * viewer.imageryLayers.addImageryProvider(weather); * * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthEnterpriseMapsProvider * @see OpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider * @see UrlTemplateImageryProvider */ function WebMapTileServiceImageryProvider(options) { options = defaultValue(options, defaultValue.EMPTY_OBJECT); //>>includeStart('debug', pragmas.debug); if (!defined(options.url)) { throw new DeveloperError("options.url is required."); } if (!defined(options.layer)) { throw new DeveloperError("options.layer is required."); } if (!defined(options.style)) { throw new DeveloperError("options.style is required."); } if (!defined(options.tileMatrixSetID)) { throw new DeveloperError("options.tileMatrixSetID is required."); } if (defined(options.times) && !defined(options.clock)) { throw new DeveloperError( "options.times was specified, so options.clock is required." ); } //>>includeEnd('debug'); this._defaultAlpha = undefined; this._defaultNightAlpha = undefined; this._defaultDayAlpha = undefined; this._defaultBrightness = undefined; this._defaultContrast = undefined; this._defaultHue = undefined; this._defaultSaturation = undefined; this._defaultGamma = undefined; this._defaultMinificationFilter = undefined; this._defaultMagnificationFilter = undefined; const resource = Resource.createIfNeeded(options.url); const style = options.style; const tileMatrixSetID = options.tileMatrixSetID; const url = resource.url; const bracketMatch = url.match(/{/g); if ( !defined(bracketMatch) || (bracketMatch.length === 1 && /{s}/.test(url)) ) { resource.setQueryParameters(defaultParameters); this._useKvp = true; } else { const templateValues = { style: style, Style: style, TileMatrixSet: tileMatrixSetID, }; resource.setTemplateValues(templateValues); this._useKvp = false; } this._resource = resource; this._layer = options.layer; this._style = style; this._tileMatrixSetID = tileMatrixSetID; this._tileMatrixLabels = options.tileMatrixLabels; this._format = defaultValue(options.format, "image/jpeg"); this._tileDiscardPolicy = options.tileDiscardPolicy; this._tilingScheme = defined(options.tilingScheme) ? options.tilingScheme : new WebMercatorTilingScheme({ ellipsoid: options.ellipsoid }); this._tileWidth = defaultValue(options.tileWidth, 256); this._tileHeight = defaultValue(options.tileHeight, 256); this._minimumLevel = defaultValue(options.minimumLevel, 0); this._maximumLevel = options.maximumLevel; this._rectangle = defaultValue( options.rectangle, this._tilingScheme.rectangle ); this._dimensions = options.dimensions; const that = this; this._reload = undefined; if (defined(options.times)) { this._timeDynamicImagery = new TimeDynamicImagery({ clock: options.clock, times: options.times, requestImageFunction: function (x, y, level, request, interval) { return requestImage(that, x, y, level, request, interval); }, reloadFunction: function () { if (defined(that._reload)) { that._reload(); } }, }); } this._readyPromise = Promise.resolve(true); this._ready = true; // Check the number of tiles at the minimum level. If it's more than four, // throw an exception, because starting at the higher minimum // level will cause too many tiles to be downloaded and rendered. const swTile = this._tilingScheme.positionToTileXY( Rectangle.southwest(this._rectangle), this._minimumLevel ); const neTile = this._tilingScheme.positionToTileXY( Rectangle.northeast(this._rectangle), this._minimumLevel ); const tileCount = (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1); //>>includeStart('debug', pragmas.debug); if (tileCount > 4) { throw new DeveloperError( `The imagery provider's rectangle and minimumLevel indicate that there are ${tileCount} tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.` ); } //>>includeEnd('debug'); this._errorEvent = new Event(); const credit = options.credit; this._credit = typeof credit === "string" ? new Credit(credit) : credit; this._subdomains = options.subdomains; if (Array.isArray(this._subdomains)) { this._subdomains = this._subdomains.slice(); } else if (defined(this._subdomains) && this._subdomains.length > 0) { this._subdomains = this._subdomains.split(""); } else { this._subdomains = ["a", "b", "c"]; } } function requestImage(imageryProvider, col, row, level, request, interval) { const labels = imageryProvider._tileMatrixLabels; const tileMatrix = defined(labels) ? labels[level] : level.toString(); const subdomains = imageryProvider._subdomains; const staticDimensions = imageryProvider._dimensions; const dynamicIntervalData = defined(interval) ? interval.data : undefined; let resource; let templateValues; if (!imageryProvider._useKvp) { templateValues = { TileMatrix: tileMatrix, TileRow: row.toString(), TileCol: col.toString(), s: subdomains[(col + row + level) % subdomains.length], }; resource = imageryProvider._resource.getDerivedResource({ request: request, }); resource.setTemplateValues(templateValues); if (defined(staticDimensions)) { resource.setTemplateValues(staticDimensions); } if (defined(dynamicIntervalData)) { resource.setTemplateValues(dynamicIntervalData); } } else { // build KVP request let query = {}; query.tilematrix = tileMatrix; query.layer = imageryProvider._layer; query.style = imageryProvider._style; query.tilerow = row; query.tilecol = col; query.tilematrixset = imageryProvider._tileMatrixSetID; query.format = imageryProvider._format; if (defined(staticDimensions)) { query = combine(query, staticDimensions); } if (defined(dynamicIntervalData)) { query = combine(query, dynamicIntervalData); } templateValues = { s: subdomains[(col + row + level) % subdomains.length], }; resource = imageryProvider._resource.getDerivedResource({ queryParameters: query, request: request, }); resource.setTemplateValues(templateValues); } return ImageryProvider.loadImage(imageryProvider, resource); } Object.defineProperties(WebMapTileServiceImageryProvider.prototype, { /** * Gets the URL of the service hosting the imagery. * @memberof WebMapTileServiceImageryProvider.prototype * @type {string} * @readonly */ url: { get: function () { return this._resource.url; }, }, /** * Gets the proxy used by this provider. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Proxy} * @readonly */ proxy: { get: function () { return this._resource.proxy; }, }, /** * Gets the width of each tile, in pixels. * @memberof WebMapTileServiceImageryProvider.prototype * @type {number} * @readonly */ tileWidth: { get: function () { return this._tileWidth; }, }, /** * Gets the height of each tile, in pixels. * @memberof WebMapTileServiceImageryProvider.prototype * @type {number} * @readonly */ tileHeight: { get: function () { return this._tileHeight; }, }, /** * Gets the maximum level-of-detail that can be requested. * @memberof WebMapTileServiceImageryProvider.prototype * @type {number|undefined} * @readonly */ maximumLevel: { get: function () { return this._maximumLevel; }, }, /** * Gets the minimum level-of-detail that can be requested. * @memberof WebMapTileServiceImageryProvider.prototype * @type {number} * @readonly */ minimumLevel: { get: function () { return this._minimumLevel; }, }, /** * Gets the tiling scheme used by this provider. * @memberof WebMapTileServiceImageryProvider.prototype * @type {TilingScheme} * @readonly */ tilingScheme: { get: function () { return this._tilingScheme; }, }, /** * Gets the rectangle, in radians, of the imagery provided by this instance. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Rectangle} * @readonly */ rectangle: { get: function () { return this._rectangle; }, }, /** * Gets the tile discard policy. If not undefined, the discard policy is responsible * for filtering out "missing" tiles via its shouldDiscardImage function. If this function * returns undefined, no tiles are filtered. * @memberof WebMapTileServiceImageryProvider.prototype * @type {TileDiscardPolicy} * @readonly */ tileDiscardPolicy: { get: function () { return this._tileDiscardPolicy; }, }, /** * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing * to the event, you will be notified of the error and can potentially recover from it. Event listeners * are passed an instance of {@link TileProviderError}. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Event} * @readonly */ errorEvent: { get: function () { return this._errorEvent; }, }, /** * Gets the mime type of images returned by this imagery provider. * @memberof WebMapTileServiceImageryProvider.prototype * @type {string} * @readonly */ format: { get: function () { return this._format; }, }, /** * Gets a value indicating whether or not the provider is ready for use. * @memberof WebMapTileServiceImageryProvider.prototype * @type {boolean} * @readonly * @deprecated */ ready: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.ready", "WebMapTileServiceImageryProvider.ready was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107." ); return true; }, }, /** * Gets a promise that resolves to true when the provider is ready for use. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Promise} * @readonly * @deprecated */ readyPromise: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.readyPromise", "WebMapTileServiceImageryProvider.readyPromise was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107." ); return this._readyPromise; }, }, /** * Gets the credit to display when this imagery provider is active. Typically this is used to credit * the source of the imagery. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Credit} * @readonly */ credit: { get: function () { return this._credit; }, }, /** * Gets a value indicating whether or not the images provided by this imagery provider * include an alpha channel. If this property is false, an alpha channel, if present, will * be ignored. If this property is true, any images without an alpha channel will be treated * as if their alpha is 1.0 everywhere. When this property is false, memory usage * and texture upload time are reduced. * @memberof WebMapTileServiceImageryProvider.prototype * @type {boolean} * @readonly */ hasAlphaChannel: { get: function () { return true; }, }, /** * Gets or sets a clock that is used to get keep the time used for time dynamic parameters. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Clock} */ clock: { get: function () { return this._timeDynamicImagery.clock; }, set: function (value) { this._timeDynamicImagery.clock = value; }, }, /** * Gets or sets a time interval collection that is used to get time dynamic parameters. The data of each * TimeInterval is an object containing the keys and values of the properties that are used during * tile requests. * @memberof WebMapTileServiceImageryProvider.prototype * @type {TimeIntervalCollection} */ times: { get: function () { return this._timeDynamicImagery.times; }, set: function (value) { this._timeDynamicImagery.times = value; }, }, /** * Gets or sets an object that contains static dimensions and their values. * @memberof WebMapTileServiceImageryProvider.prototype * @type {object} */ dimensions: { get: function () { return this._dimensions; }, set: function (value) { if (this._dimensions !== value) { this._dimensions = value; if (defined(this._reload)) { this._reload(); } } }, }, /** * The default alpha blending value of this provider, with 0.0 representing fully transparent and * 1.0 representing fully opaque. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Number|undefined} * @deprecated */ defaultAlpha: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultAlpha", "WebMapTileServiceImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.alpha instead." ); return this._defaultAlpha; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultAlpha", "WebMapTileServiceImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.alpha instead." ); this._defaultAlpha = value; }, }, /** * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and * 1.0 representing fully opaque. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Number|undefined} * @deprecated */ defaultNightAlpha: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultNightAlpha", "WebMapTileServiceImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead." ); return this._defaultNightAlpha; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultNightAlpha", "WebMapTileServiceImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead." ); this._defaultNightAlpha = value; }, }, /** * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and * 1.0 representing fully opaque. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Number|undefined} * @deprecated */ defaultDayAlpha: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultDayAlpha", "WebMapTileServiceImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead." ); return this._defaultDayAlpha; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultDayAlpha", "WebMapTileServiceImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead." ); this._defaultDayAlpha = value; }, }, /** * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 * makes the imagery darker while greater than 1.0 makes it brighter. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Number|undefined} * @deprecated */ defaultBrightness: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultBrightness", "WebMapTileServiceImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.brightness instead." ); return this._defaultBrightness; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultBrightness", "WebMapTileServiceImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.brightness instead." ); this._defaultBrightness = value; }, }, /** * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces * the contrast while greater than 1.0 increases it. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Number|undefined} * @deprecated */ defaultContrast: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultContrast", "WebMapTileServiceImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.contrast instead." ); return this._defaultContrast; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultContrast", "WebMapTileServiceImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.contrast instead." ); this._defaultContrast = value; }, }, /** * The default hue of this provider in radians. 0.0 uses the unmodified imagery color. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Number|undefined} * @deprecated */ defaultHue: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultHue", "WebMapTileServiceImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.hue instead." ); return this._defaultHue; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultHue", "WebMapTileServiceImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.hue instead." ); this._defaultHue = value; }, }, /** * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the * saturation while greater than 1.0 increases it. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Number|undefined} * @deprecated */ defaultSaturation: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultSaturation", "WebMapTileServiceImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.saturation instead." ); return this._defaultSaturation; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultSaturation", "WebMapTileServiceImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.saturation instead." ); this._defaultSaturation = value; }, }, /** * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color. * @memberof WebMapTileServiceImageryProvider.prototype * @type {Number|undefined} * @deprecated */ defaultGamma: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultGamma", "WebMapTileServiceImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.gamma instead." ); return this._defaultGamma; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultGamma", "WebMapTileServiceImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.gamma instead." ); this._defaultGamma = value; }, }, /** * The default texture minification filter to apply to this provider. * @memberof WebMapTileServiceImageryProvider.prototype * @type {TextureMinificationFilter} * @deprecated */ defaultMinificationFilter: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultMinificationFilter", "WebMapTileServiceImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead." ); return this._defaultMinificationFilter; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultMinificationFilter", "WebMapTileServiceImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead." ); this._defaultMinificationFilter = value; }, }, /** * The default texture magnification filter to apply to this provider. * @memberof WebMapTileServiceImageryProvider.prototype * @type {TextureMagnificationFilter} * @deprecated */ defaultMagnificationFilter: { get: function () { deprecationWarning( "WebMapTileServiceImageryProvider.defaultMagnificationFilter", "WebMapTileServiceImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead." ); return this._defaultMagnificationFilter; }, set: function (value) { deprecationWarning( "WebMapTileServiceImageryProvider.defaultMagnificationFilter", "WebMapTileServiceImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead." ); this._defaultMagnificationFilter = value; }, }, }); /** * Gets the credits to be displayed when a given tile is displayed. * * @param {number} x The tile X coordinate. * @param {number} y The tile Y coordinate. * @param {number} level The tile level; * @returns {Credit[]} The credits to be displayed when the tile is displayed. */ WebMapTileServiceImageryProvider.prototype.getTileCredits = function ( x, y, level ) { return undefined; }; /** * Requests the image for a given tile. * * @param {number} x The tile X coordinate. * @param {number} y The tile Y coordinate. * @param {number} level The tile level. * @param {Request} [request] The request object. Intended for internal use only. * @returns {Promise|undefined} A promise for the image that will resolve when the image is available, or * undefined if there are too many active requests to the server, and the request should be retried later. */ WebMapTileServiceImageryProvider.prototype.requestImage = function ( x, y, level, request ) { let result; const timeDynamicImagery = this._timeDynamicImagery; let currentInterval; // Try and load from cache if (defined(timeDynamicImagery)) { currentInterval = timeDynamicImagery.currentInterval; result = timeDynamicImagery.getFromCache(x, y, level, request); } // Couldn't load from cache if (!defined(result)) { result = requestImage(this, x, y, level, request, currentInterval); } // If we are approaching an interval, preload this tile in the next interval if (defined(result) && defined(timeDynamicImagery)) { timeDynamicImagery.checkApproachingInterval(x, y, level, request); } return result; }; /** * Picking features is not currently supported by this imagery provider, so this function simply returns * undefined. * * @param {number} x The tile X coordinate. * @param {number} y The tile Y coordinate. * @param {number} level The tile level. * @param {number} longitude The longitude at which to pick features. * @param {number} latitude The latitude at which to pick features. * @return {undefined} Undefined since picking is not supported. */ WebMapTileServiceImageryProvider.prototype.pickFeatures = function ( x, y, level, longitude, latitude ) { return undefined; }; export default WebMapTileServiceImageryProvider;