From a228dae4ab38990157985c568c29b9a23d16e770 Mon Sep 17 00:00:00 2001 From: Adam Cole Date: Mon, 19 Oct 2015 05:08:09 -0400 Subject: [PATCH 01/17] have openStreetMapImageryProdider use urlTemplateImageryProvider --- Source/Scene/OpenStreetMapImageryProvider.js | 73 ++++++++++++-------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index 1831f5942b7f..0343b2f42d52 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -8,8 +8,9 @@ define([ '../Core/Event', '../Core/Rectangle', '../Core/WebMercatorTilingScheme', - './ImageryProvider' - ], function( + './ImageryProvider', + './UrlTemplateImageryProvider' +], function( Credit, defaultValue, defined, @@ -18,7 +19,9 @@ define([ Event, Rectangle, WebMercatorTilingScheme, - ImageryProvider) { + ImageryProvider, + UrlTemplateImageryProvider + ) { "use strict"; var trailingSlashRegex = /\/$/; @@ -71,25 +74,25 @@ define([ } this._url = url; - this._fileExtension = defaultValue(options.fileExtension, 'png'); - this._proxy = options.proxy; + var fileExtension = defaultValue(options.fileExtension, 'png'); + //this._proxy = options.proxy; this._tileDiscardPolicy = options.tileDiscardPolicy; - this._tilingScheme = new WebMercatorTilingScheme({ ellipsoid : options.ellipsoid }); + var tilingScheme = new WebMercatorTilingScheme({ ellipsoid : options.ellipsoid }); - this._tileWidth = 256; - this._tileHeight = 256; + var tileWidth = 256; + var tileHeight = 256; - this._minimumLevel = defaultValue(options.minimumLevel, 0); - this._maximumLevel = options.maximumLevel; + var minimumLevel = defaultValue(options.minimumLevel, 0); + var maximumLevel = options.maximumLevel; - this._rectangle = defaultValue(options.rectangle, this._tilingScheme.rectangle); + var rectangle = defaultValue(options.rectangle, tilingScheme.rectangle); // 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. - var swTile = this._tilingScheme.positionToTileXY(Rectangle.southwest(this._rectangle), this._minimumLevel); - var neTile = this._tilingScheme.positionToTileXY(Rectangle.northeast(this._rectangle), this._minimumLevel); + var swTile = tilingScheme.positionToTileXY(Rectangle.southwest(rectangle), minimumLevel); + var neTile = tilingScheme.positionToTileXY(Rectangle.northeast(rectangle), minimumLevel); var tileCount = (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1); 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.'); @@ -103,7 +106,21 @@ define([ if (typeof credit === 'string') { credit = new Credit(credit); } - this._credit = credit; + + var templateUrl = url; + templateUrl += "/{z}/{x}/{y}." + fileExtension; + + this._imageryProvider = new UrlTemplateImageryProvider({ + url: templateUrl, + proxy: options.proxy, + credit: credit, + tilingScheme: tilingScheme, + tileWidth: tileWidth, + tileHeight: tileHeight, + minimumLevel: minimumLevel, + maximumLevel: maximumLevel, + rectangle: rectangle + }); }; function buildImageUrl(imageryProvider, x, y, level) { @@ -138,7 +155,7 @@ define([ */ proxy : { get : function() { - return this._proxy; + return this._imageryProvider._proxy; } }, @@ -157,7 +174,7 @@ define([ } //>>includeEnd('debug'); - return this._tileWidth; + return this._imageryProvider._tileWidth; } }, @@ -176,7 +193,7 @@ define([ } //>>includeEnd('debug'); - return this._tileHeight; + return this._imageryProvider._tileHeight; } }, @@ -195,7 +212,7 @@ define([ } //>>includeEnd('debug'); - return this._maximumLevel; + return this._imageryProvider._maximumLevel; } }, @@ -214,7 +231,7 @@ define([ } //>>includeEnd('debug'); - return this._minimumLevel; + return this._imageryProvider._minimumLevel; } }, @@ -233,7 +250,7 @@ define([ } //>>includeEnd('debug'); - return this._tilingScheme; + return this._imageryProvider._tilingScheme; } }, @@ -252,7 +269,7 @@ define([ } //>>includeEnd('debug'); - return this._rectangle; + return this._imageryProvider._rectangle; } }, @@ -287,7 +304,7 @@ define([ */ errorEvent : { get : function() { - return this._errorEvent; + return this._imageryProvider._errorEvent; } }, @@ -299,7 +316,7 @@ define([ */ ready : { get : function() { - return this._ready; + return this._imageryProvider._ready; } }, @@ -312,7 +329,7 @@ define([ */ credit : { get : function() { - return this._credit; + return this._imageryProvider._credit; } }, @@ -363,13 +380,15 @@ define([ */ OpenStreetMapImageryProvider.prototype.requestImage = function(x, y, level) { //>>includeStart('debug', pragmas.debug); - if (!this._ready) { + if (!this._imageryProvider._ready) { throw new DeveloperError('requestImage must not be called before the imagery provider is ready.'); } //>>includeEnd('debug'); - var url = buildImageUrl(this, x, y, level); - return ImageryProvider.loadImage(this, url); + //var url = buildImageUrl(this, x, y, level); + //return ImageryProvider.loadImage(this, url); + console.log("hello"); + return this._imageryProvider.requestImage(x, y, level); }; /** From f15e7068025528bb0d6b3c20cc11d0abe702fa46 Mon Sep 17 00:00:00 2001 From: Adam Cole Date: Mon, 19 Oct 2015 05:27:26 -0400 Subject: [PATCH 02/17] working open street map imagery using UrlTemplateImageryProvider --- Source/Scene/OpenStreetMapImageryProvider.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index 0343b2f42d52..6cb4dbdc48c1 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -107,8 +107,7 @@ define([ credit = new Credit(credit); } - var templateUrl = url; - templateUrl += "/{z}/{x}/{y}." + fileExtension; + var templateUrl = url + "{z}/{x}/{y}." + fileExtension; this._imageryProvider = new UrlTemplateImageryProvider({ url: templateUrl, @@ -316,7 +315,7 @@ define([ */ ready : { get : function() { - return this._imageryProvider._ready; + return this._imageryProvider.ready; } }, @@ -380,14 +379,13 @@ define([ */ OpenStreetMapImageryProvider.prototype.requestImage = function(x, y, level) { //>>includeStart('debug', pragmas.debug); - if (!this._imageryProvider._ready) { + if (!this._imageryProvider.ready) { throw new DeveloperError('requestImage must not be called before the imagery provider is ready.'); } //>>includeEnd('debug'); //var url = buildImageUrl(this, x, y, level); //return ImageryProvider.loadImage(this, url); - console.log("hello"); return this._imageryProvider.requestImage(x, y, level); }; From 501ee9ef2c2b5336b139916386670661e6c2ed81 Mon Sep 17 00:00:00 2001 From: Adam Cole Date: Mon, 19 Oct 2015 05:33:52 -0400 Subject: [PATCH 03/17] cleaned up code style --- Source/Scene/OpenStreetMapImageryProvider.js | 22 +++++--------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index 6cb4dbdc48c1..7d520fdb6e57 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -74,10 +74,10 @@ define([ } this._url = url; - var fileExtension = defaultValue(options.fileExtension, 'png'); - //this._proxy = options.proxy; this._tileDiscardPolicy = options.tileDiscardPolicy; + var fileExtension = defaultValue(options.fileExtension, 'png'); + var tilingScheme = new WebMercatorTilingScheme({ ellipsoid : options.ellipsoid }); var tileWidth = 256; @@ -98,10 +98,6 @@ define([ 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.'); } - this._errorEvent = new Event(); - - this._ready = true; - var credit = defaultValue(options.credit, defaultCredit); if (typeof credit === 'string') { credit = new Credit(credit); @@ -120,18 +116,10 @@ define([ maximumLevel: maximumLevel, rectangle: rectangle }); - }; - - function buildImageUrl(imageryProvider, x, y, level) { - var url = imageryProvider._url + level + '/' + x + '/' + y + '.' + imageryProvider._fileExtension; - - var proxy = imageryProvider._proxy; - if (defined(proxy)) { - url = proxy.getURL(url); - } - return url; - } + this._errorEvent = new Event(); + this._ready = true; + }; defineProperties(OpenStreetMapImageryProvider.prototype, { /** From be5cab342122acdc754fc93bc7b04a4f03ee957a Mon Sep 17 00:00:00 2001 From: Adam Cole Date: Thu, 29 Oct 2015 18:30:25 -0400 Subject: [PATCH 04/17] removed unecceary code, and return instance of UrlTemplateImageryProvider --- Source/Scene/OpenStreetMapImageryProvider.js | 292 +------------------ 1 file changed, 3 insertions(+), 289 deletions(-) diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index 7d520fdb6e57..b424acc0b270 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -2,24 +2,16 @@ define([ '../Core/Credit', '../Core/defaultValue', - '../Core/defined', - '../Core/defineProperties', '../Core/DeveloperError', - '../Core/Event', '../Core/Rectangle', '../Core/WebMercatorTilingScheme', - './ImageryProvider', './UrlTemplateImageryProvider' ], function( Credit, defaultValue, - defined, - defineProperties, DeveloperError, - Event, Rectangle, WebMercatorTilingScheme, - ImageryProvider, UrlTemplateImageryProvider ) { "use strict"; @@ -64,7 +56,7 @@ define([ * url : '//a.tile.openstreetmap.org/' * }); */ - var OpenStreetMapImageryProvider = function OpenStreetMapImageryProvider(options) { + return function OpenStreetMapImageryProvider(options) { options = defaultValue(options, {}); var url = defaultValue(options.url, '//a.tile.openstreetmap.org/'); @@ -103,9 +95,10 @@ define([ credit = new Credit(credit); } + // template url scheme for OpenStreetMap imagery var templateUrl = url + "{z}/{x}/{y}." + fileExtension; - this._imageryProvider = new UrlTemplateImageryProvider({ + return new UrlTemplateImageryProvider({ url: templateUrl, proxy: options.proxy, credit: credit, @@ -116,284 +109,5 @@ define([ maximumLevel: maximumLevel, rectangle: rectangle }); - - this._errorEvent = new Event(); - this._ready = true; - }; - - defineProperties(OpenStreetMapImageryProvider.prototype, { - /** - * Gets the URL of the service hosting the imagery. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {String} - * @readonly - */ - url : { - get : function() { - return this._url; - } - }, - - /** - * Gets the proxy used by this provider. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {Proxy} - * @readonly - */ - proxy : { - get : function() { - return this._imageryProvider._proxy; - } - }, - - /** - * Gets the width of each tile, in pixels. This function should - * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {Number} - * @readonly - */ - tileWidth : { - get : function() { - //>>includeStart('debug', pragmas.debug); - if (!this._ready) { - throw new DeveloperError('tileWidth must not be called before the imagery provider is ready.'); - } - //>>includeEnd('debug'); - - return this._imageryProvider._tileWidth; - } - }, - - /** - * Gets the height of each tile, in pixels. This function should - * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {Number} - * @readonly - */ - tileHeight: { - get : function() { - //>>includeStart('debug', pragmas.debug); - if (!this._ready) { - throw new DeveloperError('tileHeight must not be called before the imagery provider is ready.'); - } - //>>includeEnd('debug'); - - return this._imageryProvider._tileHeight; - } - }, - - /** - * Gets the maximum level-of-detail that can be requested. This function should - * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {Number} - * @readonly - */ - maximumLevel : { - get : function() { - //>>includeStart('debug', pragmas.debug); - if (!this._ready) { - throw new DeveloperError('maximumLevel must not be called before the imagery provider is ready.'); - } - //>>includeEnd('debug'); - - return this._imageryProvider._maximumLevel; - } - }, - - /** - * Gets the minimum level-of-detail that can be requested. This function should - * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {Number} - * @readonly - */ - minimumLevel : { - get : function() { - //>>includeStart('debug', pragmas.debug); - if (!this._ready) { - throw new DeveloperError('minimumLevel must not be called before the imagery provider is ready.'); - } - //>>includeEnd('debug'); - - return this._imageryProvider._minimumLevel; - } - }, - - /** - * Gets the tiling scheme used by this provider. This function should - * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {TilingScheme} - * @readonly - */ - tilingScheme : { - get : function() { - //>>includeStart('debug', pragmas.debug); - if (!this._ready) { - throw new DeveloperError('tilingScheme must not be called before the imagery provider is ready.'); - } - //>>includeEnd('debug'); - - return this._imageryProvider._tilingScheme; - } - }, - - /** - * Gets the rectangle, in radians, of the imagery provided by this instance. This function should - * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {Rectangle} - * @readonly - */ - rectangle : { - get : function() { - //>>includeStart('debug', pragmas.debug); - if (!this._ready) { - throw new DeveloperError('rectangle must not be called before the imagery provider is ready.'); - } - //>>includeEnd('debug'); - - return this._imageryProvider._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. This function should - * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {TileDiscardPolicy} - * @readonly - */ - tileDiscardPolicy : { - get : function() { - //>>includeStart('debug', pragmas.debug); - if (!this._ready) { - throw new DeveloperError('tileDiscardPolicy must not be called before the imagery provider is ready.'); - } - //>>includeEnd('debug'); - - 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 OpenStreetMapImageryProvider.prototype - * @type {Event} - * @readonly - */ - errorEvent : { - get : function() { - return this._imageryProvider._errorEvent; - } - }, - - /** - * Gets a value indicating whether or not the provider is ready for use. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {Boolean} - * @readonly - */ - ready : { - get : function() { - return this._imageryProvider.ready; - } - }, - - /** - * Gets the credit to display when this imagery provider is active. Typically this is used to credit - * the source of the imagery. This function should not be called before {@link OpenStreetMapImageryProvider#ready} returns true. - * @memberof OpenStreetMapImageryProvider.prototype - * @type {Credit} - * @readonly - */ - credit : { - get : function() { - return this._imageryProvider._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 OpenStreetMapImageryProvider.prototype - * @type {Boolean} - * @readonly - */ - hasAlphaChannel : { - get : function() { - return true; - } - } - }); - - /** - * 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. - * - * @exception {DeveloperError} getTileCredits must not be called before the imagery provider is ready. - */ - OpenStreetMapImageryProvider.prototype.getTileCredits = function(x, y, level) { - return undefined; }; - - /** - * Requests the image for a given tile. This function should - * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. - * - * @param {Number} x The tile X coordinate. - * @param {Number} y The tile Y coordinate. - * @param {Number} level The tile level. - * @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. The resolved image may be either an - * Image or a Canvas DOM object. - * - * @exception {DeveloperError} requestImage must not be called before the imagery provider is ready. - */ - OpenStreetMapImageryProvider.prototype.requestImage = function(x, y, level) { - //>>includeStart('debug', pragmas.debug); - if (!this._imageryProvider.ready) { - throw new DeveloperError('requestImage must not be called before the imagery provider is ready.'); - } - //>>includeEnd('debug'); - - //var url = buildImageUrl(this, x, y, level); - //return ImageryProvider.loadImage(this, url); - return this._imageryProvider.requestImage(x, y, level); - }; - - /** - * 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 {Promise.|undefined} A promise for the picked features that will resolve when the asynchronous - * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} - * instances. The array may be empty if no features are found at the given location. - * It may also be undefined if picking is not supported. - */ - OpenStreetMapImageryProvider.prototype.pickFeatures = function() { - return undefined; - }; - - return OpenStreetMapImageryProvider; }); From e111f56fbce478e4e20bf9a5ea174f2789b64dbc Mon Sep 17 00:00:00 2001 From: Adam Cole Date: Thu, 29 Oct 2015 18:37:10 -0400 Subject: [PATCH 05/17] added back functions to conform to ImageryProvider interface --- Source/Scene/OpenStreetMapImageryProvider.js | 71 +++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index b424acc0b270..b349b36f8ddf 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -2,16 +2,24 @@ define([ '../Core/Credit', '../Core/defaultValue', + '../Core/defined', + '../Core/defineProperties', '../Core/DeveloperError', + '../Core/Event', '../Core/Rectangle', '../Core/WebMercatorTilingScheme', + './ImageryProvider', './UrlTemplateImageryProvider' ], function( Credit, defaultValue, + defined, + defineProperties, DeveloperError, + Event, Rectangle, WebMercatorTilingScheme, + ImageryProvider, UrlTemplateImageryProvider ) { "use strict"; @@ -56,7 +64,7 @@ define([ * url : '//a.tile.openstreetmap.org/' * }); */ - return function OpenStreetMapImageryProvider(options) { + var OpenStreetMapImageryProvider = function OpenStreetMapImageryProvider(options) { options = defaultValue(options, {}); var url = defaultValue(options.url, '//a.tile.openstreetmap.org/'); @@ -95,7 +103,6 @@ define([ credit = new Credit(credit); } - // template url scheme for OpenStreetMap imagery var templateUrl = url + "{z}/{x}/{y}." + fileExtension; return new UrlTemplateImageryProvider({ @@ -110,4 +117,64 @@ define([ rectangle: rectangle }); }; + + /** + * 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. + * + * @exception {DeveloperError} getTileCredits must not be called before the imagery provider is ready. + */ + OpenStreetMapImageryProvider.prototype.getTileCredits = function(x, y, level) { + return undefined; + }; + + /** + * Requests the image for a given tile. This function should + * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. + * + * @param {Number} x The tile X coordinate. + * @param {Number} y The tile Y coordinate. + * @param {Number} level The tile level. + * @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. The resolved image may be either an + * Image or a Canvas DOM object. + * + * @exception {DeveloperError} requestImage must not be called before the imagery provider is ready. + */ + OpenStreetMapImageryProvider.prototype.requestImage = function(x, y, level) { + //>>includeStart('debug', pragmas.debug); + if (!this._imageryProvider.ready) { + throw new DeveloperError('requestImage must not be called before the imagery provider is ready.'); + } + //>>includeEnd('debug'); + + //var url = buildImageUrl(this, x, y, level); + //return ImageryProvider.loadImage(this, url); + return this._imageryProvider.requestImage(x, y, level); + }; + + /** + * 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 {Promise.|undefined} A promise for the picked features that will resolve when the asynchronous + * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo} + * instances. The array may be empty if no features are found at the given location. + * It may also be undefined if picking is not supported. + */ + OpenStreetMapImageryProvider.prototype.pickFeatures = function() { + return undefined; + }; + + return OpenStreetMapImageryProvider; }); From 176add2a071bcf45587de8d98196d1e308d5823b Mon Sep 17 00:00:00 2001 From: Adam Cole Date: Wed, 11 Nov 2015 03:35:03 -0500 Subject: [PATCH 06/17] reverted and deprecated openStreetMapImageryProvider, created OpenStreetMapImageryProviderGenerator function which creates an OpenMap imagery provider using a UrlTemplateImageryProvider --- Source/Scene/OpenStreetMapImageryProvider.js | 283 ++++++++++++++++-- .../OpenStreetMapImageryProviderGenerator.js | 122 ++++++++ ...enStreetMapImageryProviderGeneratorSpec.js | 261 ++++++++++++++++ 3 files changed, 635 insertions(+), 31 deletions(-) create mode 100644 Source/Scene/OpenStreetMapImageryProviderGenerator.js create mode 100644 Specs/Scene/OpenStreetMapImageryProviderGeneratorSpec.js diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index b349b36f8ddf..8888cecc191a 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -9,7 +9,7 @@ define([ '../Core/Rectangle', '../Core/WebMercatorTilingScheme', './ImageryProvider', - './UrlTemplateImageryProvider' + '../Core/deprecationWarning' ], function( Credit, defaultValue, @@ -20,14 +20,16 @@ define([ Rectangle, WebMercatorTilingScheme, ImageryProvider, - UrlTemplateImageryProvider - ) { + deprecationWarning +) { "use strict"; var trailingSlashRegex = /\/$/; var defaultCredit = new Credit('MapQuest, Open Street Map and contributors, CC-BY-SA'); /** + * @deprecated + * * Provides tiled imagery hosted by OpenStreetMap or another provider of Slippy tiles. Please be aware * that a default-constructed instance of this class will connect to OpenStreetMap's volunteer-run * servers, so you must conform to their @@ -65,6 +67,8 @@ define([ * }); */ var OpenStreetMapImageryProvider = function OpenStreetMapImageryProvider(options) { + deprecationWarning('OpenStreetMapImageryProvider', 'Scene/OpenStreetMapImageryProvider is deprecated. ' + + 'Use Scene/OpenStreetMapImageryProviderGenerator instead.'); options = defaultValue(options, {}); var url = defaultValue(options.url, '//a.tile.openstreetmap.org/'); @@ -74,50 +78,268 @@ define([ } this._url = url; + this._fileExtension = defaultValue(options.fileExtension, 'png'); + this._proxy = options.proxy; this._tileDiscardPolicy = options.tileDiscardPolicy; - var fileExtension = defaultValue(options.fileExtension, 'png'); - - var tilingScheme = new WebMercatorTilingScheme({ ellipsoid : options.ellipsoid }); + this._tilingScheme = new WebMercatorTilingScheme({ ellipsoid : options.ellipsoid }); - var tileWidth = 256; - var tileHeight = 256; + this._tileWidth = 256; + this._tileHeight = 256; - var minimumLevel = defaultValue(options.minimumLevel, 0); - var maximumLevel = options.maximumLevel; + this._minimumLevel = defaultValue(options.minimumLevel, 0); + this._maximumLevel = options.maximumLevel; - var rectangle = defaultValue(options.rectangle, tilingScheme.rectangle); + this._rectangle = defaultValue(options.rectangle, this._tilingScheme.rectangle); // 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. - var swTile = tilingScheme.positionToTileXY(Rectangle.southwest(rectangle), minimumLevel); - var neTile = tilingScheme.positionToTileXY(Rectangle.northeast(rectangle), minimumLevel); + var swTile = this._tilingScheme.positionToTileXY(Rectangle.southwest(this._rectangle), this._minimumLevel); + var neTile = this._tilingScheme.positionToTileXY(Rectangle.northeast(this._rectangle), this._minimumLevel); var tileCount = (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1); 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.'); } + this._errorEvent = new Event(); + + this._ready = true; + var credit = defaultValue(options.credit, defaultCredit); if (typeof credit === 'string') { credit = new Credit(credit); } - - var templateUrl = url + "{z}/{x}/{y}." + fileExtension; - - return new UrlTemplateImageryProvider({ - url: templateUrl, - proxy: options.proxy, - credit: credit, - tilingScheme: tilingScheme, - tileWidth: tileWidth, - tileHeight: tileHeight, - minimumLevel: minimumLevel, - maximumLevel: maximumLevel, - rectangle: rectangle - }); + this._credit = credit; }; + function buildImageUrl(imageryProvider, x, y, level) { + var url = imageryProvider._url + level + '/' + x + '/' + y + '.' + imageryProvider._fileExtension; + + var proxy = imageryProvider._proxy; + if (defined(proxy)) { + url = proxy.getURL(url); + } + + return url; + } + + defineProperties(OpenStreetMapImageryProvider.prototype, { + /** + * Gets the URL of the service hosting the imagery. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {String} + * @readonly + */ + url : { + get : function() { + return this._url; + } + }, + + /** + * Gets the proxy used by this provider. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {Proxy} + * @readonly + */ + proxy : { + get : function() { + return this._proxy; + } + }, + + /** + * Gets the width of each tile, in pixels. This function should + * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {Number} + * @readonly + */ + tileWidth : { + get : function() { + //>>includeStart('debug', pragmas.debug); + if (!this._ready) { + throw new DeveloperError('tileWidth must not be called before the imagery provider is ready.'); + } + //>>includeEnd('debug'); + + return this._tileWidth; + } + }, + + /** + * Gets the height of each tile, in pixels. This function should + * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {Number} + * @readonly + */ + tileHeight: { + get : function() { + //>>includeStart('debug', pragmas.debug); + if (!this._ready) { + throw new DeveloperError('tileHeight must not be called before the imagery provider is ready.'); + } + //>>includeEnd('debug'); + + return this._tileHeight; + } + }, + + /** + * Gets the maximum level-of-detail that can be requested. This function should + * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {Number} + * @readonly + */ + maximumLevel : { + get : function() { + //>>includeStart('debug', pragmas.debug); + if (!this._ready) { + throw new DeveloperError('maximumLevel must not be called before the imagery provider is ready.'); + } + //>>includeEnd('debug'); + + return this._maximumLevel; + } + }, + + /** + * Gets the minimum level-of-detail that can be requested. This function should + * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {Number} + * @readonly + */ + minimumLevel : { + get : function() { + //>>includeStart('debug', pragmas.debug); + if (!this._ready) { + throw new DeveloperError('minimumLevel must not be called before the imagery provider is ready.'); + } + //>>includeEnd('debug'); + + return this._minimumLevel; + } + }, + + /** + * Gets the tiling scheme used by this provider. This function should + * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {TilingScheme} + * @readonly + */ + tilingScheme : { + get : function() { + //>>includeStart('debug', pragmas.debug); + if (!this._ready) { + throw new DeveloperError('tilingScheme must not be called before the imagery provider is ready.'); + } + //>>includeEnd('debug'); + + return this._tilingScheme; + } + }, + + /** + * Gets the rectangle, in radians, of the imagery provided by this instance. This function should + * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {Rectangle} + * @readonly + */ + rectangle : { + get : function() { + //>>includeStart('debug', pragmas.debug); + if (!this._ready) { + throw new DeveloperError('rectangle must not be called before the imagery provider is ready.'); + } + //>>includeEnd('debug'); + + 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. This function should + * not be called before {@link OpenStreetMapImageryProvider#ready} returns true. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {TileDiscardPolicy} + * @readonly + */ + tileDiscardPolicy : { + get : function() { + //>>includeStart('debug', pragmas.debug); + if (!this._ready) { + throw new DeveloperError('tileDiscardPolicy must not be called before the imagery provider is ready.'); + } + //>>includeEnd('debug'); + + 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 OpenStreetMapImageryProvider.prototype + * @type {Event} + * @readonly + */ + errorEvent : { + get : function() { + return this._errorEvent; + } + }, + + /** + * Gets a value indicating whether or not the provider is ready for use. + * @memberof OpenStreetMapImageryProvider.prototype + * @type {Boolean} + * @readonly + */ + ready : { + get : function() { + return this._ready; + } + }, + + /** + * Gets the credit to display when this imagery provider is active. Typically this is used to credit + * the source of the imagery. This function should not be called before {@link OpenStreetMapImageryProvider#ready} returns true. + * @memberof OpenStreetMapImageryProvider.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 OpenStreetMapImageryProvider.prototype + * @type {Boolean} + * @readonly + */ + hasAlphaChannel : { + get : function() { + return true; + } + } + }); + /** * Gets the credits to be displayed when a given tile is displayed. * @@ -148,14 +370,13 @@ define([ */ OpenStreetMapImageryProvider.prototype.requestImage = function(x, y, level) { //>>includeStart('debug', pragmas.debug); - if (!this._imageryProvider.ready) { + if (!this._ready) { throw new DeveloperError('requestImage must not be called before the imagery provider is ready.'); } //>>includeEnd('debug'); - //var url = buildImageUrl(this, x, y, level); - //return ImageryProvider.loadImage(this, url); - return this._imageryProvider.requestImage(x, y, level); + var url = buildImageUrl(this, x, y, level); + return ImageryProvider.loadImage(this, url); }; /** diff --git a/Source/Scene/OpenStreetMapImageryProviderGenerator.js b/Source/Scene/OpenStreetMapImageryProviderGenerator.js new file mode 100644 index 000000000000..2afcae5aa0ee --- /dev/null +++ b/Source/Scene/OpenStreetMapImageryProviderGenerator.js @@ -0,0 +1,122 @@ +/*global define*/ +define([ + '../Core/Credit', + '../Core/defaultValue', + '../Core/defined', + '../Core/defineProperties', + '../Core/DeveloperError', + '../Core/Event', + '../Core/Rectangle', + '../Core/WebMercatorTilingScheme', + './ImageryProvider', + './UrlTemplateImageryProvider' +], function( + Credit, + defaultValue, + defined, + defineProperties, + DeveloperError, + Event, + Rectangle, + WebMercatorTilingScheme, + ImageryProvider, + UrlTemplateImageryProvider +) { + "use strict"; + + var trailingSlashRegex = /\/$/; + var defaultCredit = new Credit('MapQuest, Open Street Map and contributors, CC-BY-SA'); + + /** + * Provides tiled imagery hosted by OpenStreetMap or another provider of Slippy tiles. Please be aware + * that a default-constructed instance of this class will connect to OpenStreetMap's volunteer-run + * servers, so you must conform to their + * {@link http://wiki.openstreetmap.org/wiki/Tile_usage_policy|Tile Usage Policy}. + * + * @alias OpenStreetMapImageryProvider + * @constructor + * + * @param {Object} [options] Object with the following properties: + * @param {String} [options.url='//a.tile.openstreetmap.org'] The OpenStreetMap server url. + * @param {String} [options.fileExtension='png'] The file extension for images on the server. + * @param {Object} [options.proxy] A proxy to use for requests. This object is expected to have a getURL function which returns the proxied URL. + * @param {Rectangle} [options.rectangle=Rectangle.MAX_VALUE] The rectangle of the layer. + * @param {Number} [options.minimumLevel=0] The minimum level-of-detail supported by the imagery provider. + * @param {Number} [options.maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit. + * @param {Ellipsoid} [options.ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used. + * @param {Credit|String} [options.credit='MapQuest, Open Street Map and contributors, CC-BY-SA'] A credit for the data source, which is displayed on the canvas. + * + * @see ArcGisMapServerImageryProvider + * @see BingMapsImageryProvider + * @see GoogleEarthImageryProvider + * @see SingleTileImageryProvider + * @see TileMapServiceImageryProvider + * @see WebMapServiceImageryProvider + * @see WebMapTileServiceImageryProvider + * @see UrlTemplateImageryProvider + * + * @see {@link http://wiki.openstreetmap.org/wiki/Main_Page|OpenStreetMap Wiki} + * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} + * + * @example + * // OpenStreetMap tile provider + * var osm = new Cesium.OpenStreetMapImageryProvider({ + * url : '//a.tile.openstreetmap.org/' + * }); + */ + var OpenStreetMapImageryProviderGenerator = function OpenStreetMapImageryProvider(options) { + options = defaultValue(options, {}); + + var url = defaultValue(options.url, '//a.tile.openstreetmap.org/'); + + if (!trailingSlashRegex.test(url)) { + url = url + '/'; + } + + this._url = url; + this._tileDiscardPolicy = options.tileDiscardPolicy; + + var fileExtension = defaultValue(options.fileExtension, 'png'); + + var tilingScheme = new WebMercatorTilingScheme({ ellipsoid : options.ellipsoid }); + + var tileWidth = 256; + var tileHeight = 256; + + var minimumLevel = defaultValue(options.minimumLevel, 0); + var maximumLevel = options.maximumLevel; + + var rectangle = defaultValue(options.rectangle, tilingScheme.rectangle); + + // 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. + var swTile = tilingScheme.positionToTileXY(Rectangle.southwest(rectangle), minimumLevel); + var neTile = tilingScheme.positionToTileXY(Rectangle.northeast(rectangle), minimumLevel); + var tileCount = (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1); + 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.'); + } + + var credit = defaultValue(options.credit, defaultCredit); + if (typeof credit === 'string') { + credit = new Credit(credit); + } + + var templateUrl = url + "{z}/{x}/{y}." + fileExtension; + + return new UrlTemplateImageryProvider({ + url: templateUrl, + proxy: options.proxy, + credit: credit, + tilingScheme: tilingScheme, + tileWidth: tileWidth, + tileHeight: tileHeight, + minimumLevel: minimumLevel, + maximumLevel: maximumLevel, + rectangle: rectangle + }); + }; + + return OpenStreetMapImageryProviderGenerator; +}); \ No newline at end of file diff --git a/Specs/Scene/OpenStreetMapImageryProviderGeneratorSpec.js b/Specs/Scene/OpenStreetMapImageryProviderGeneratorSpec.js new file mode 100644 index 000000000000..78a77f6dcb13 --- /dev/null +++ b/Specs/Scene/OpenStreetMapImageryProviderGeneratorSpec.js @@ -0,0 +1,261 @@ +/*global defineSuite*/ +defineSuite([ + 'Scene/OpenStreetMapImageryProviderGenerator', + 'Core/DefaultProxy', + 'Core/loadImage', + 'Core/Rectangle', + 'Core/WebMercatorTilingScheme', + 'Scene/Imagery', + 'Scene/ImageryLayer', + 'Scene/ImageryProvider', + 'Scene/ImageryState', + 'Specs/pollToPromise', + 'Core/Math' +], function( + OpenStreetMapImageryProviderGenerator, + DefaultProxy, + loadImage, + Rectangle, + WebMercatorTilingScheme, + Imagery, + ImageryLayer, + ImageryProvider, + ImageryState, + pollToPromise, + CesiumMath +) { + "use strict"; + /*global jasmine,describe,xdescribe,it,xit,expect,beforeEach,afterEach,beforeAll,afterAll,spyOn*/ + + afterEach(function() { + loadImage.createImage = loadImage.defaultCreateImage; + }); + + it('conforms to ImageryProvider interface', function() { + expect(OpenStreetMapImageryProviderGenerator).toConformToInterface(ImageryProvider); + }); + + it('can be default constructed', function() { + return new OpenStreetMapImageryProviderGenerator(); + }); + + it('returns valid value for hasAlphaChannel', function() { + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server/' + }); + + return pollToPromise(function() { + return provider.ready; + }).then(function() { + expect(typeof provider.hasAlphaChannel).toBe('boolean'); + }); + }); + + it('supports a slash at the end of the URL', function() { + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server/' + }); + + return pollToPromise(function() { + return provider.ready; + }).then(function() { + spyOn(loadImage, 'createImage').and.callFake(function(url, crossOrigin, deferred) { + expect(url).not.toContain('//'); + + // Just return any old image. + loadImage.defaultCreateImage('Data/Images/Red16x16.png', crossOrigin, deferred); + }); + + return provider.requestImage(0, 0, 0).then(function(image) { + expect(loadImage.createImage).toHaveBeenCalled(); + expect(image).toBeInstanceOf(Image); + }); + }); + }); + + it('supports no slash at the endof the URL', function() { + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server' + }); + + return pollToPromise(function() { + return provider.ready; + }).then(function() { + spyOn(loadImage, 'createImage').and.callFake(function(url, crossOrigin, deferred) { + expect(url).toContain('made/up/osm/server/'); + + // Just return any old image. + loadImage.defaultCreateImage('Data/Images/Red16x16.png', crossOrigin, deferred); + }); + + return provider.requestImage(0, 0, 0).then(function(image) { + expect(loadImage.createImage).toHaveBeenCalled(); + expect(image).toBeInstanceOf(Image); + }); + }); + }); + + it('requestImage returns a promise for an image and loads it for cross-origin use', function() { + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server/' + }); + + expect(provider.url).toContain('made/up/osm/server/'); + + return pollToPromise(function() { + return provider.ready; + }).then(function() { + expect(provider.tileWidth).toEqual(256); + expect(provider.tileHeight).toEqual(256); + expect(provider.maximumLevel).toBeUndefined(); + expect(provider.tilingScheme).toBeInstanceOf(WebMercatorTilingScheme); + expect(provider.rectangle).toEqual(new WebMercatorTilingScheme().rectangle); + + spyOn(loadImage, 'createImage').and.callFake(function(url, crossOrigin, deferred) { + // Just return any old image. + loadImage.defaultCreateImage('Data/Images/Red16x16.png', crossOrigin, deferred); + }); + + return provider.requestImage(0, 0, 0).then(function(image) { + expect(loadImage.createImage).toHaveBeenCalled(); + expect(image).toBeInstanceOf(Image); + }); + }); + }); + + it('when no credit is supplied, a default one is used', function() { + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server' + }); + expect(provider.credit).toBeDefined(); + }); + + it('turns the supplied credit into a logo', function() { + var providerWithCredit = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server', + credit : 'Thanks to our awesome made up source of this imagery!' + }); + expect(providerWithCredit.credit).toBeDefined(); + }); + + it('routes requests through a proxy if one is specified', function() { + var proxy = new DefaultProxy('/proxy/'); + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server', + proxy : proxy + }); + + return pollToPromise(function() { + return provider.ready; + }).then(function() { + expect(provider.proxy).toEqual(proxy); + + spyOn(loadImage, 'createImage').and.callFake(function(url, crossOrigin, deferred) { + expect(url.indexOf(proxy.getURL('made/up/osm/server'))).toEqual(0); + + // Just return any old image. + loadImage.defaultCreateImage('Data/Images/Red16x16.png', crossOrigin, deferred); + }); + + return provider.requestImage(0, 0, 0).then(function(image) { + expect(loadImage.createImage).toHaveBeenCalled(); + expect(image).toBeInstanceOf(Image); + }); + }); + }); + + it('rectangle passed to constructor does not affect tile numbering', function() { + var rectangle = new Rectangle(0.1, 0.2, 0.3, 0.4); + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server', + rectangle : rectangle + }); + + return pollToPromise(function() { + return provider.ready; + }).then(function() { + expect(provider.tileWidth).toEqual(256); + expect(provider.tileHeight).toEqual(256); + expect(provider.maximumLevel).toBeUndefined(); + expect(provider.tilingScheme).toBeInstanceOf(WebMercatorTilingScheme); + expect(provider.rectangle.west).toBeCloseTo(rectangle.west, CesiumMath.EPSILON10); + expect(provider.rectangle.south).toBeCloseTo(rectangle.south, CesiumMath.EPSILON10); + expect(provider.rectangle.east).toBeCloseTo(rectangle.east, CesiumMath.EPSILON10); + expect(provider.rectangle.north).toBeCloseTo(rectangle.north, CesiumMath.EPSILON10); + expect(provider.tileDiscardPolicy).toBeUndefined(); + + spyOn(loadImage, 'createImage').and.callFake(function(url, crossOrigin, deferred) { + expect(url).toContain('/0/0/0'); + + // Just return any old image. + loadImage.defaultCreateImage('Data/Images/Red16x16.png', crossOrigin, deferred); + }); + + return provider.requestImage(0, 0, 0).then(function(image) { + expect(loadImage.createImage).toHaveBeenCalled(); + expect(image).toBeInstanceOf(Image); + }); + }); + }); + + it('uses maximumLevel passed to constructor', function() { + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server', + maximumLevel : 5 + }); + expect(provider.maximumLevel).toEqual(5); + }); + + it('uses minimumLevel passed to constructor', function() { + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server', + minimumLevel : 1 + }); + expect(provider.minimumLevel).toEqual(1); + }); + + it('raises error event when image cannot be loaded', function() { + var provider = new OpenStreetMapImageryProviderGenerator({ + url : 'made/up/osm/server' + }); + + var layer = new ImageryLayer(provider); + + var tries = 0; + provider.errorEvent.addEventListener(function(error) { + expect(error.timesRetried).toEqual(tries); + ++tries; + if (tries < 3) { + error.retry = true; + } + }); + + loadImage.createImage = function(url, crossOrigin, deferred) { + if (tries === 2) { + // Succeed after 2 tries + loadImage.defaultCreateImage('Data/Images/Red16x16.png', crossOrigin, deferred); + } else { + // fail + setTimeout(function() { + deferred.reject(); + }, 1); + } + }; + + return pollToPromise(function() { + return provider.ready; + }).then(function() { + var imagery = new Imagery(layer, 0, 0, 0); + imagery.addReference(); + layer._requestImagery(imagery); + + return pollToPromise(function() { + return imagery.state === ImageryState.RECEIVED; + }).then(function() { + expect(imagery.image).toBeInstanceOf(Image); + expect(tries).toEqual(2); + imagery.releaseReference(); + }); + }); + }); +}); From 6064f856cf7ea2b7d77f79652b32bbfab9487fc6 Mon Sep 17 00:00:00 2001 From: Adam Cole Date: Sun, 15 Nov 2015 21:13:18 -0500 Subject: [PATCH 07/17] make getOpenStreetMapImageryProvider a function, update spec to match --- ....js => getOpenStreetMapImageryProvider.js} | 9 ++---- ...=> getOpenStreetMapImageryProviderSpec.js} | 30 +++++++++---------- 2 files changed, 18 insertions(+), 21 deletions(-) rename Source/Scene/{OpenStreetMapImageryProviderGenerator.js => getOpenStreetMapImageryProvider.js} (94%) rename Specs/Scene/{OpenStreetMapImageryProviderGeneratorSpec.js => getOpenStreetMapImageryProviderSpec.js} (89%) diff --git a/Source/Scene/OpenStreetMapImageryProviderGenerator.js b/Source/Scene/getOpenStreetMapImageryProvider.js similarity index 94% rename from Source/Scene/OpenStreetMapImageryProviderGenerator.js rename to Source/Scene/getOpenStreetMapImageryProvider.js index 2afcae5aa0ee..44e14bac2e94 100644 --- a/Source/Scene/OpenStreetMapImageryProviderGenerator.js +++ b/Source/Scene/getOpenStreetMapImageryProvider.js @@ -60,11 +60,11 @@ define([ * * @example * // OpenStreetMap tile provider - * var osm = new Cesium.OpenStreetMapImageryProvider({ + * var osm = Cesium.getOpenStreetMapImageryProvider({ * url : '//a.tile.openstreetmap.org/' * }); */ - var OpenStreetMapImageryProviderGenerator = function OpenStreetMapImageryProvider(options) { + var getOpenStreetMapImageryProvider = function getOpenStreetMapImageryProvider(options) { options = defaultValue(options, {}); var url = defaultValue(options.url, '//a.tile.openstreetmap.org/'); @@ -73,9 +73,6 @@ define([ url = url + '/'; } - this._url = url; - this._tileDiscardPolicy = options.tileDiscardPolicy; - var fileExtension = defaultValue(options.fileExtension, 'png'); var tilingScheme = new WebMercatorTilingScheme({ ellipsoid : options.ellipsoid }); @@ -118,5 +115,5 @@ define([ }); }; - return OpenStreetMapImageryProviderGenerator; + return getOpenStreetMapImageryProvider; }); \ No newline at end of file diff --git a/Specs/Scene/OpenStreetMapImageryProviderGeneratorSpec.js b/Specs/Scene/getOpenStreetMapImageryProviderSpec.js similarity index 89% rename from Specs/Scene/OpenStreetMapImageryProviderGeneratorSpec.js rename to Specs/Scene/getOpenStreetMapImageryProviderSpec.js index 78a77f6dcb13..4dd2b49d25dc 100644 --- a/Specs/Scene/OpenStreetMapImageryProviderGeneratorSpec.js +++ b/Specs/Scene/getOpenStreetMapImageryProviderSpec.js @@ -1,6 +1,6 @@ /*global defineSuite*/ defineSuite([ - 'Scene/OpenStreetMapImageryProviderGenerator', + 'Scene/getOpenStreetMapImageryProvider', 'Core/DefaultProxy', 'Core/loadImage', 'Core/Rectangle', @@ -12,7 +12,7 @@ defineSuite([ 'Specs/pollToPromise', 'Core/Math' ], function( - OpenStreetMapImageryProviderGenerator, + getOpenStreetMapImageryProvider, DefaultProxy, loadImage, Rectangle, @@ -32,15 +32,15 @@ defineSuite([ }); it('conforms to ImageryProvider interface', function() { - expect(OpenStreetMapImageryProviderGenerator).toConformToInterface(ImageryProvider); + expect(getOpenStreetMapImageryProvider).toConformToInterface(ImageryProvider); }); it('can be default constructed', function() { - return new OpenStreetMapImageryProviderGenerator(); + return getOpenStreetMapImageryProvider(); }); it('returns valid value for hasAlphaChannel', function() { - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server/' }); @@ -52,7 +52,7 @@ defineSuite([ }); it('supports a slash at the end of the URL', function() { - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server/' }); @@ -74,7 +74,7 @@ defineSuite([ }); it('supports no slash at the endof the URL', function() { - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server' }); @@ -96,7 +96,7 @@ defineSuite([ }); it('requestImage returns a promise for an image and loads it for cross-origin use', function() { - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server/' }); @@ -124,14 +124,14 @@ defineSuite([ }); it('when no credit is supplied, a default one is used', function() { - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server' }); expect(provider.credit).toBeDefined(); }); it('turns the supplied credit into a logo', function() { - var providerWithCredit = new OpenStreetMapImageryProviderGenerator({ + var providerWithCredit = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server', credit : 'Thanks to our awesome made up source of this imagery!' }); @@ -140,7 +140,7 @@ defineSuite([ it('routes requests through a proxy if one is specified', function() { var proxy = new DefaultProxy('/proxy/'); - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server', proxy : proxy }); @@ -166,7 +166,7 @@ defineSuite([ it('rectangle passed to constructor does not affect tile numbering', function() { var rectangle = new Rectangle(0.1, 0.2, 0.3, 0.4); - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server', rectangle : rectangle }); @@ -199,7 +199,7 @@ defineSuite([ }); it('uses maximumLevel passed to constructor', function() { - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server', maximumLevel : 5 }); @@ -207,7 +207,7 @@ defineSuite([ }); it('uses minimumLevel passed to constructor', function() { - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server', minimumLevel : 1 }); @@ -215,7 +215,7 @@ defineSuite([ }); it('raises error event when image cannot be loaded', function() { - var provider = new OpenStreetMapImageryProviderGenerator({ + var provider = getOpenStreetMapImageryProvider({ url : 'made/up/osm/server' }); From 296c461f1d9820b88fdc11384f120a046e72fe40 Mon Sep 17 00:00:00 2001 From: Adam Cole Date: Sun, 15 Nov 2015 21:44:06 -0500 Subject: [PATCH 08/17] replaced all instaces of new OpenStreetMapImageryProvider with the getOpenStreetMapImageryProvider function --- .../gallery/Imagery Layers Manipulation.html | 6 +++--- CHANGES.md | 2 ++ Source/Scene/ArcGisMapServerImageryProvider.js | 2 +- Source/Scene/BingMapsImageryProvider.js | 2 +- Source/Scene/GoogleEarthImageryProvider.js | 2 +- Source/Scene/ImageryProvider.js | 2 +- Source/Scene/OpenStreetMapImageryProvider.js | 2 +- Source/Scene/SingleTileImageryProvider.js | 2 +- Source/Scene/TileMapServiceImageryProvider.js | 2 +- Source/Scene/UrlTemplateImageryProvider.js | 2 +- Source/Scene/WebMapServiceImageryProvider.js | 2 +- Source/Scene/WebMapTileServiceImageryProvider.js | 2 +- Source/Scene/getOpenStreetMapImageryProvider.js | 4 ++-- Source/Widgets/BaseLayerPicker/BaseLayerPicker.js | 2 +- .../createDefaultImageryProviderViewModels.js | 12 ++++++------ Source/Widgets/CesiumWidget/CesiumWidget.js | 2 +- Source/Widgets/Viewer/Viewer.js | 2 +- 17 files changed, 26 insertions(+), 24 deletions(-) diff --git a/Apps/Sandcastle/gallery/Imagery Layers Manipulation.html b/Apps/Sandcastle/gallery/Imagery Layers Manipulation.html index 9dd9f56ab96b..4dee7176a795 100644 --- a/Apps/Sandcastle/gallery/Imagery Layers Manipulation.html +++ b/Apps/Sandcastle/gallery/Imagery Layers Manipulation.html @@ -124,15 +124,15 @@ })); addBaseLayerOption( 'OpenStreetMaps', - new Cesium.OpenStreetMapImageryProvider()); + Cesium.getOpenStreetMapImageryProvider()); addBaseLayerOption( 'MapQuest OpenStreetMaps', - new Cesium.OpenStreetMapImageryProvider({ + Cesium.getOpenStreetMapImageryProvider({ url: '//otile1-s.mqcdn.com/tiles/1.0.0/osm/' })); addBaseLayerOption( 'Stamen Maps', - new Cesium.OpenStreetMapImageryProvider({ + Cesium.getOpenStreetMapImageryProvider({ url: '//stamen-tiles.a.ssl.fastly.net/watercolor/', fileExtension: 'jpg', credit: 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.' diff --git a/CHANGES.md b/CHANGES.md index 7fd323d2d70a..ec43cf6ceaee 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,8 @@ Change Log * Added support for fog near the horizon, which improves performance by rendering less terrain tiles and reduces terrain tile requests. This is enabled by default. See `Scene.fog` for options. [#3154](https://github.com/AnalyticalGraphicsInc/cesium/pull/3154) * Added `Queue.peek` to return the item at the front of a Queue. * Added `Camera.distanceToBoundingSphere` function. +* Deprecated `OpenStreetMapImageryProvider`. It will be removed in 1.18. Use `getOpenStreetMapImageryProvider` instead. + ### 1.15 - 2015-11-02 diff --git a/Source/Scene/ArcGisMapServerImageryProvider.js b/Source/Scene/ArcGisMapServerImageryProvider.js index a4646ab698eb..15b7405ed2fa 100644 --- a/Source/Scene/ArcGisMapServerImageryProvider.js +++ b/Source/Scene/ArcGisMapServerImageryProvider.js @@ -95,7 +95,7 @@ define([ * * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see OpenStreetMapImageryProvider + * @see getOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/BingMapsImageryProvider.js b/Source/Scene/BingMapsImageryProvider.js index 55efd9d0a941..7a7fc4755f35 100644 --- a/Source/Scene/BingMapsImageryProvider.js +++ b/Source/Scene/BingMapsImageryProvider.js @@ -77,7 +77,7 @@ define([ * * @see ArcGisMapServerImageryProvider * @see GoogleEarthImageryProvider - * @see OpenStreetMapImageryProvider + * @see getOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/GoogleEarthImageryProvider.js b/Source/Scene/GoogleEarthImageryProvider.js index 736942848349..f4c6c42d10d7 100644 --- a/Source/Scene/GoogleEarthImageryProvider.js +++ b/Source/Scene/GoogleEarthImageryProvider.js @@ -82,7 +82,7 @@ define([ * * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider - * @see OpenStreetMapImageryProvider + * @see getOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/ImageryProvider.js b/Source/Scene/ImageryProvider.js index 59aeade6062e..25508ce24305 100644 --- a/Source/Scene/ImageryProvider.js +++ b/Source/Scene/ImageryProvider.js @@ -27,7 +27,7 @@ define([ * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider * @see MapboxImageryProvider - * @see OpenStreetMapImageryProvider + * @see getOpenStreetMapImageryProvider * @see WebMapTileServiceImageryProvider * @see WebMapServiceImageryProvider * diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index 7e0060944ead..5214b3e05ecb 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -70,7 +70,7 @@ define([ */ var OpenStreetMapImageryProvider = function OpenStreetMapImageryProvider(options) { deprecationWarning('OpenStreetMapImageryProvider', 'Scene/OpenStreetMapImageryProvider is deprecated. ' + - 'Use Scene/OpenStreetMapImageryProviderGenerator instead.'); + 'Use Scene/getOpenStreetMapImageryProvider instead.'); options = defaultValue(options, {}); var url = defaultValue(options.url, '//a.tile.openstreetmap.org/'); diff --git a/Source/Scene/SingleTileImageryProvider.js b/Source/Scene/SingleTileImageryProvider.js index 7bdb44ee8d7e..638ff9178e84 100644 --- a/Source/Scene/SingleTileImageryProvider.js +++ b/Source/Scene/SingleTileImageryProvider.js @@ -44,7 +44,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see OpenStreetMapImageryProvider + * @see getOpenStreetMapImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider * @see WebMapTileServiceImageryProvider diff --git a/Source/Scene/TileMapServiceImageryProvider.js b/Source/Scene/TileMapServiceImageryProvider.js index 8233fcb7a975..7aee45992e8d 100644 --- a/Source/Scene/TileMapServiceImageryProvider.js +++ b/Source/Scene/TileMapServiceImageryProvider.js @@ -65,7 +65,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see OpenStreetMapImageryProvider + * @see getOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see WebMapServiceImageryProvider * @see WebMapTileServiceImageryProvider diff --git a/Source/Scene/UrlTemplateImageryProvider.js b/Source/Scene/UrlTemplateImageryProvider.js index 8e874bdd3ff0..3ece8691e53c 100644 --- a/Source/Scene/UrlTemplateImageryProvider.js +++ b/Source/Scene/UrlTemplateImageryProvider.js @@ -119,7 +119,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see OpenStreetMapImageryProvider + * @see getOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/WebMapServiceImageryProvider.js b/Source/Scene/WebMapServiceImageryProvider.js index f2dc96d83a3f..e04941e3d351 100644 --- a/Source/Scene/WebMapServiceImageryProvider.js +++ b/Source/Scene/WebMapServiceImageryProvider.js @@ -73,7 +73,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see OpenStreetMapImageryProvider + * @see getOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapTileServiceImageryProvider diff --git a/Source/Scene/WebMapTileServiceImageryProvider.js b/Source/Scene/WebMapTileServiceImageryProvider.js index a1492d6d9e96..a86f307196a9 100644 --- a/Source/Scene/WebMapTileServiceImageryProvider.js +++ b/Source/Scene/WebMapTileServiceImageryProvider.js @@ -63,7 +63,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see OpenStreetMapImageryProvider + * @see getOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/getOpenStreetMapImageryProvider.js b/Source/Scene/getOpenStreetMapImageryProvider.js index 44e14bac2e94..1455f814779f 100644 --- a/Source/Scene/getOpenStreetMapImageryProvider.js +++ b/Source/Scene/getOpenStreetMapImageryProvider.js @@ -33,8 +33,8 @@ define([ * servers, so you must conform to their * {@link http://wiki.openstreetmap.org/wiki/Tile_usage_policy|Tile Usage Policy}. * - * @alias OpenStreetMapImageryProvider - * @constructor + * @alias getOpenStreetMapImageryProvider + * @exports getTimestamp * * @param {Object} [options] Object with the following properties: * @param {String} [options.url='//a.tile.openstreetmap.org'] The OpenStreetMap server url. diff --git a/Source/Widgets/BaseLayerPicker/BaseLayerPicker.js b/Source/Widgets/BaseLayerPicker/BaseLayerPicker.js index 2008c67a04bb..a281ea4ab7b2 100644 --- a/Source/Widgets/BaseLayerPicker/BaseLayerPicker.js +++ b/Source/Widgets/BaseLayerPicker/BaseLayerPicker.js @@ -63,7 +63,7 @@ define([ * tooltip : 'OpenStreetMap (OSM) is a collaborative project to create a free editable \ * map of the world.\nhttp://www.openstreetmap.org', * creationFunction : function() { - * return new Cesium.OpenStreetMapImageryProvider({ + * return Cesium.getOpenStreetMapImageryProvider({ * url : '//a.tile.openstreetmap.org/' * }); * } diff --git a/Source/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js b/Source/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js index 96edc645c3e8..0847708c2c9c 100644 --- a/Source/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js +++ b/Source/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js @@ -5,7 +5,7 @@ define([ '../../Scene/BingMapsImageryProvider', '../../Scene/BingMapsStyle', '../../Scene/MapboxImageryProvider', - '../../Scene/OpenStreetMapImageryProvider', + '../../Scene/getOpenStreetMapImageryProvider', '../../Scene/TileMapServiceImageryProvider', '../BaseLayerPicker/ProviderViewModel' ], function( @@ -14,7 +14,7 @@ define([ BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, - OpenStreetMapImageryProvider, + getOpenStreetMapImageryProvider, TileMapServiceImageryProvider, ProviderViewModel) { "use strict"; @@ -149,7 +149,7 @@ mapping applications.\nhttp://www.esri.com', tooltip : 'OpenStreetMap (OSM) is a collaborative project to create a free editable map \ of the world.\nhttp://www.openstreetmap.org', creationFunction : function() { - return new OpenStreetMapImageryProvider({ + return getOpenStreetMapImageryProvider({ url : '//a.tile.openstreetmap.org/' }); } @@ -161,7 +161,7 @@ of the world.\nhttp://www.openstreetmap.org', tooltip : 'Reminiscent of hand drawn maps, Stamen watercolor maps apply raster effect \ area washes and organic edges over a paper texture to add warm pop to any map.\nhttp://maps.stamen.com', creationFunction : function() { - return new OpenStreetMapImageryProvider({ + return getOpenStreetMapImageryProvider({ url : '//stamen-tiles.a.ssl.fastly.net/watercolor/', credit : 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.' }); @@ -173,7 +173,7 @@ area washes and organic edges over a paper texture to add warm pop to any map.\n iconUrl : buildModuleUrl('Widgets/Images/ImageryProviders/stamenToner.png'), tooltip : 'A high contrast black and white map.\nhttp://maps.stamen.com', creationFunction : function() { - return new OpenStreetMapImageryProvider({ + return getOpenStreetMapImageryProvider({ url : '//stamen-tiles.a.ssl.fastly.net/toner/', credit : 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.' }); @@ -186,7 +186,7 @@ area washes and organic edges over a paper texture to add warm pop to any map.\n tooltip : 'OpenStreetMap (OSM) is a collaborative project to create a free editable \ map of the world.\nhttp://www.openstreetmap.org', creationFunction : function() { - return new OpenStreetMapImageryProvider({ + return getOpenStreetMapImageryProvider({ url : '//otile1-s.mqcdn.com/tiles/1.0.0/osm/' }); } diff --git a/Source/Widgets/CesiumWidget/CesiumWidget.js b/Source/Widgets/CesiumWidget/CesiumWidget.js index 9d285cc0078e..de7c336f9bd1 100644 --- a/Source/Widgets/CesiumWidget/CesiumWidget.js +++ b/Source/Widgets/CesiumWidget/CesiumWidget.js @@ -167,7 +167,7 @@ define([ * * //Widget with OpenStreetMaps imagery provider and Cesium terrain provider hosted by AGI. * var widget = new Cesium.CesiumWidget('cesiumContainer', { - * imageryProvider : new Cesium.OpenStreetMapImageryProvider(), + * imageryProvider : Cesium.getOpenStreetMapImageryProvider(), * terrainProvider : new Cesium.CesiumTerrainProvider({ * url : '//assets.agi.com/stk-terrain/world' * }), diff --git a/Source/Widgets/Viewer/Viewer.js b/Source/Widgets/Viewer/Viewer.js index 74001f284302..58b90f00bc3b 100644 --- a/Source/Widgets/Viewer/Viewer.js +++ b/Source/Widgets/Viewer/Viewer.js @@ -249,7 +249,7 @@ define([ * //Hide the base layer picker * baseLayerPicker : false, * //Use OpenStreetMaps - * imageryProvider : new Cesium.OpenStreetMapImageryProvider({ + * imageryProvider : Cesium.getOpenStreetMapImageryProvider({ * url : '//a.tile.openstreetmap.org/' * }), * // Use high-res stars downloaded from https://github.com/AnalyticalGraphicsInc/cesium-assets From 032d48c14a06206f822c049d3b842220c47e8563 Mon Sep 17 00:00:00 2001 From: Patrick Cozzi Date: Mon, 16 Nov 2015 07:56:34 -0500 Subject: [PATCH 09/17] Tweak CHANGES.md --- CHANGES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 24a08b224fbb..a8cbe294e058 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,8 @@ Change Log ### 1.16 - 2015-12-01 +* Deprecated + * Deprecated `OpenStreetMapImageryProvider`. It will be removed in 1.18. Use `getOpenStreetMapImageryProvider` instead. * Fixed an issue where the sun texture is not generated correctly on some mobile devices. [#3141](https://github.com/AnalyticalGraphicsInc/cesium/issues/3141) * Fixed a bug in the deprecated `jsonp` that prevented it from returning a promise. Its replacement, `loadJsonp`, was unaffected. * Fixed glTF implementation to read the version as a string as per the specification and to correctly handle backwards compatibility for axis-angle rotations in glTF 0.8 models. @@ -22,8 +24,6 @@ Change Log * Added `Cartographic.fromCartesian` function. * Added `Camera.getPixelSize` function to get the size of a pixel in meters based on the current view. * Added `getOpenStreetMapImageryProvider` function to replace the `OpenStreetMapImageryProvider` class. This function returns a constructed `UrlTemplateImageryProvider`. -* Deprecated `OpenStreetMapImageryProvider`. It will be removed in 1.18. Use `getOpenStreetMapImageryProvider` instead. - ### 1.15 - 2015-11-02 From 5491d6084745ef32d52f1700a36c19dd8da0e237 Mon Sep 17 00:00:00 2001 From: Patrick Cozzi Date: Mon, 16 Nov 2015 08:06:49 -0500 Subject: [PATCH 10/17] Tweak OpenStreetMapImageryProvider.js --- Source/Scene/OpenStreetMapImageryProvider.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index 5214b3e05ecb..4d323c39d14f 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -4,24 +4,24 @@ define([ '../Core/defaultValue', '../Core/defined', '../Core/defineProperties', + '../Core/deprecationWarning', '../Core/DeveloperError', '../Core/Event', '../Core/Rectangle', '../Core/WebMercatorTilingScheme', './ImageryProvider', - '../Core/deprecationWarning', '../ThirdParty/when' ], function( Credit, defaultValue, defined, defineProperties, + deprecationWarning, DeveloperError, Event, Rectangle, WebMercatorTilingScheme, ImageryProvider, - deprecationWarning, when ) { "use strict"; @@ -30,8 +30,6 @@ define([ var defaultCredit = new Credit('MapQuest, Open Street Map and contributors, CC-BY-SA'); /** - * @deprecated - * * Provides tiled imagery hosted by OpenStreetMap or another provider of Slippy tiles. Please be aware * that a default-constructed instance of this class will connect to OpenStreetMap's volunteer-run * servers, so you must conform to their @@ -67,6 +65,8 @@ define([ * var osm = new Cesium.OpenStreetMapImageryProvider({ * url : '//a.tile.openstreetmap.org/' * }); + * + * @deprecated */ var OpenStreetMapImageryProvider = function OpenStreetMapImageryProvider(options) { deprecationWarning('OpenStreetMapImageryProvider', 'Scene/OpenStreetMapImageryProvider is deprecated. ' + From 11178b34748df87e3d343eef3c7169d489f0faf7 Mon Sep 17 00:00:00 2001 From: Patrick Cozzi Date: Mon, 16 Nov 2015 08:07:40 -0500 Subject: [PATCH 11/17] Tweak required modules --- Source/Scene/OpenStreetMapImageryProvider.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index 4d323c39d14f..4fd3eae81593 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -9,8 +9,8 @@ define([ '../Core/Event', '../Core/Rectangle', '../Core/WebMercatorTilingScheme', - './ImageryProvider', - '../ThirdParty/when' + '../ThirdParty/when', + './ImageryProvider' ], function( Credit, defaultValue, @@ -21,8 +21,8 @@ define([ Event, Rectangle, WebMercatorTilingScheme, - ImageryProvider, - when + when, + ImageryProvider ) { "use strict"; From 0486b110c41df86eb750148886a052a1661e9ed3 Mon Sep 17 00:00:00 2001 From: Patrick Cozzi Date: Mon, 16 Nov 2015 08:08:08 -0500 Subject: [PATCH 12/17] Tweak --- Source/Scene/OpenStreetMapImageryProvider.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index 4fd3eae81593..cdd26c4d711d 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -22,8 +22,7 @@ define([ Rectangle, WebMercatorTilingScheme, when, - ImageryProvider -) { + ImageryProvider) { "use strict"; var trailingSlashRegex = /\/$/; From 043e431042af952c3eb4566225e1fce1a93b5f49 Mon Sep 17 00:00:00 2001 From: Patrick Cozzi Date: Mon, 16 Nov 2015 08:09:12 -0500 Subject: [PATCH 13/17] Tweak deprecation warning --- Source/Scene/OpenStreetMapImageryProvider.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index cdd26c4d711d..ba13929d341b 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -68,8 +68,7 @@ define([ * @deprecated */ var OpenStreetMapImageryProvider = function OpenStreetMapImageryProvider(options) { - deprecationWarning('OpenStreetMapImageryProvider', 'Scene/OpenStreetMapImageryProvider is deprecated. ' + - 'Use Scene/getOpenStreetMapImageryProvider instead.'); + deprecationWarning('OpenStreetMapImageryProvider', 'OpenStreetMapImageryProvider is deprecated. It will be removed in Cesium 1.18. Use getOpenStreetMapImageryProvider instead.'); options = defaultValue(options, {}); var url = defaultValue(options.url, '//a.tile.openstreetmap.org/'); From 229cc5747362b11507b5fd32d551c87276d98f88 Mon Sep 17 00:00:00 2001 From: Patrick Cozzi Date: Mon, 16 Nov 2015 08:51:55 -0500 Subject: [PATCH 14/17] Fix and add tests --- .../getOpenStreetMapImageryProviderSpec.js | 67 +++++++++++-------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/Specs/Scene/getOpenStreetMapImageryProviderSpec.js b/Specs/Scene/getOpenStreetMapImageryProviderSpec.js index 12bb2ec8c45a..d6646a51c5d5 100644 --- a/Specs/Scene/getOpenStreetMapImageryProviderSpec.js +++ b/Specs/Scene/getOpenStreetMapImageryProviderSpec.js @@ -1,41 +1,39 @@ /*global defineSuite*/ defineSuite([ - 'Scene/getOpenStreetMapImageryProvider', - 'Core/DefaultProxy', - 'Core/loadImage', - 'Core/Rectangle', - 'Core/WebMercatorTilingScheme', - 'Scene/Imagery', - 'Scene/ImageryLayer', - 'Scene/ImageryProvider', - 'Scene/ImageryState', - 'Specs/pollToPromise', - 'Core/Math' + 'Scene/getOpenStreetMapImageryProvider', + 'Core/DefaultProxy', + 'Core/loadImage', + 'Core/Math', + 'Core/Rectangle', + 'Core/WebMercatorTilingScheme', + 'Scene/Imagery', + 'Scene/ImageryLayer', + 'Scene/ImageryProvider', + 'Scene/ImageryState', + 'Specs/pollToPromise', + 'Scene/UrlTemplateImageryProvider', ], function( - getOpenStreetMapImageryProvider, - DefaultProxy, - loadImage, - Rectangle, - WebMercatorTilingScheme, - Imagery, - ImageryLayer, - ImageryProvider, - ImageryState, - pollToPromise, - CesiumMath -) { + getOpenStreetMapImageryProvider, + DefaultProxy, + loadImage, + CesiumMath, + Rectangle, + WebMercatorTilingScheme, + Imagery, + ImageryLayer, + ImageryProvider, + ImageryState, + pollToPromise, + UrlTemplateImageryProvider) { "use strict"; afterEach(function() { loadImage.createImage = loadImage.defaultCreateImage; }); - it('conforms to ImageryProvider interface', function() { - expect(getOpenStreetMapImageryProvider).toConformToInterface(ImageryProvider); - }); - - it('can be default constructed', function() { - return getOpenStreetMapImageryProvider(); + it('return a UrlTemplateImageryProvider', function() { + var provider = getOpenStreetMapImageryProvider(); + expect(provider).toBeInstanceOf(UrlTemplateImageryProvider); }); it('returns valid value for hasAlphaChannel', function() { @@ -257,4 +255,15 @@ defineSuite([ }); }); }); + + it('throws with more than four tiles at the minimum', function() { + var rectangle = new Rectangle(0.0, 0.0, CesiumMath.toRadians(1.0), CesiumMath.toRadians(1.0)); + + expect(function() { + return getOpenStreetMapImageryProvider({ + minimumLevel : 9, + rectangle : rectangle + }); + }).toThrowDeveloperError(); + }); }); From dc5e473da49467d56927f79e7e4985eeb0e54b26 Mon Sep 17 00:00:00 2001 From: Patrick Cozzi Date: Mon, 16 Nov 2015 08:52:07 -0500 Subject: [PATCH 15/17] Cleanup and doc --- .../Scene/getOpenStreetMapImageryProvider.js | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/Source/Scene/getOpenStreetMapImageryProvider.js b/Source/Scene/getOpenStreetMapImageryProvider.js index 1455f814779f..c50d6037123c 100644 --- a/Source/Scene/getOpenStreetMapImageryProvider.js +++ b/Source/Scene/getOpenStreetMapImageryProvider.js @@ -2,24 +2,16 @@ define([ '../Core/Credit', '../Core/defaultValue', - '../Core/defined', - '../Core/defineProperties', '../Core/DeveloperError', - '../Core/Event', '../Core/Rectangle', '../Core/WebMercatorTilingScheme', - './ImageryProvider', './UrlTemplateImageryProvider' ], function( Credit, defaultValue, - defined, - defineProperties, DeveloperError, - Event, Rectangle, WebMercatorTilingScheme, - ImageryProvider, UrlTemplateImageryProvider ) { "use strict"; @@ -28,13 +20,12 @@ define([ var defaultCredit = new Credit('MapQuest, Open Street Map and contributors, CC-BY-SA'); /** - * Provides tiled imagery hosted by OpenStreetMap or another provider of Slippy tiles. Please be aware - * that a default-constructed instance of this class will connect to OpenStreetMap's volunteer-run + * Creates a {@link UrlTemplateImageryProvider} instance that provides tiled imagery hosted by OpenStreetMap + * or another provider of Slippy tiles. The default url connects to OpenStreetMap's volunteer-run * servers, so you must conform to their * {@link http://wiki.openstreetmap.org/wiki/Tile_usage_policy|Tile Usage Policy}. * - * @alias getOpenStreetMapImageryProvider - * @exports getTimestamp + * @exports getOpenStreetMapImageryProvider * * @param {Object} [options] Object with the following properties: * @param {String} [options.url='//a.tile.openstreetmap.org'] The OpenStreetMap server url. @@ -46,6 +37,8 @@ define([ * @param {Ellipsoid} [options.ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used. * @param {Credit|String} [options.credit='MapQuest, Open Street Map and contributors, CC-BY-SA'] A credit for the data source, which is displayed on the canvas. * + * @exception {DeveloperError} The rectangle and minimumLevel indicate that there are more than four tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported. + * * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider @@ -59,7 +52,6 @@ define([ * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} * * @example - * // OpenStreetMap tile provider * var osm = Cesium.getOpenStreetMapImageryProvider({ * url : '//a.tile.openstreetmap.org/' * }); @@ -92,7 +84,7 @@ define([ var neTile = tilingScheme.positionToTileXY(Rectangle.northeast(rectangle), minimumLevel); var tileCount = (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1); 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.'); + throw new DeveloperError('The 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.'); } var credit = defaultValue(options.credit, defaultCredit); From 9694604f87cff2dddf92e470a382dadce146f75c Mon Sep 17 00:00:00 2001 From: Adam Cole Date: Thu, 19 Nov 2015 04:53:58 -0500 Subject: [PATCH 16/17] change name from 'getOpenStreetMapImageryProvider' to 'createOpenStreetMapImageryProvider' --- .../gallery/Imagery Layers Manipulation.html | 6 +- CHANGES.md | 4 +- .../Scene/ArcGisMapServerImageryProvider.js | 2 +- Source/Scene/BingMapsImageryProvider.js | 2 +- Source/Scene/GoogleEarthImageryProvider.js | 2 +- Source/Scene/ImageryProvider.js | 2 +- Source/Scene/OpenStreetMapImageryProvider.js | 2 +- Source/Scene/SingleTileImageryProvider.js | 2 +- Source/Scene/TileMapServiceImageryProvider.js | 2 +- Source/Scene/UrlTemplateImageryProvider.js | 2 +- Source/Scene/WebMapServiceImageryProvider.js | 2 +- .../Scene/WebMapTileServiceImageryProvider.js | 2 +- ... => createOpenStreetMapImageryProvider.js} | 8 +-- .../BaseLayerPicker/BaseLayerPicker.js | 2 +- .../createDefaultImageryProviderViewModels.js | 12 ++-- Source/Widgets/CesiumWidget/CesiumWidget.js | 2 +- Source/Widgets/Viewer/Viewer.js | 2 +- Specs/.jshintrc | 62 +++++++++++++++++++ ...createOpenStreetMapImageryProviderSpec.js} | 30 ++++----- 19 files changed, 105 insertions(+), 43 deletions(-) rename Source/Scene/{getOpenStreetMapImageryProvider.js => createOpenStreetMapImageryProvider.js} (94%) create mode 100644 Specs/.jshintrc rename Specs/Scene/{getOpenStreetMapImageryProviderSpec.js => createOpenStreetMapImageryProviderSpec.js} (91%) diff --git a/Apps/Sandcastle/gallery/Imagery Layers Manipulation.html b/Apps/Sandcastle/gallery/Imagery Layers Manipulation.html index 4dee7176a795..94960cdbb793 100644 --- a/Apps/Sandcastle/gallery/Imagery Layers Manipulation.html +++ b/Apps/Sandcastle/gallery/Imagery Layers Manipulation.html @@ -124,15 +124,15 @@ })); addBaseLayerOption( 'OpenStreetMaps', - Cesium.getOpenStreetMapImageryProvider()); + Cesium.createOpenStreetMapImageryProvider()); addBaseLayerOption( 'MapQuest OpenStreetMaps', - Cesium.getOpenStreetMapImageryProvider({ + Cesium.createOpenStreetMapImageryProvider({ url: '//otile1-s.mqcdn.com/tiles/1.0.0/osm/' })); addBaseLayerOption( 'Stamen Maps', - Cesium.getOpenStreetMapImageryProvider({ + Cesium.createOpenStreetMapImageryProvider({ url: '//stamen-tiles.a.ssl.fastly.net/watercolor/', fileExtension: 'jpg', credit: 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.' diff --git a/CHANGES.md b/CHANGES.md index 62ad59680511..17e20466fe44 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,7 +4,7 @@ Change Log ### 1.16 - 2015-12-01 * Deprecated - * Deprecated `OpenStreetMapImageryProvider`. It will be removed in 1.18. Use `getOpenStreetMapImageryProvider` instead. + * Deprecated `OpenStreetMapImageryProvider`. It will be removed in 1.18. Use `createOpenStreetMapImageryProvider` instead. * Fixed an issue where the sun texture is not generated correctly on some mobile devices. [#3141](https://github.com/AnalyticalGraphicsInc/cesium/issues/3141) * Fixed a bug in the deprecated `jsonp` that prevented it from returning a promise. Its replacement, `loadJsonp`, was unaffected. * Fixed glTF implementation to read the version as a string as per the specification and to correctly handle backwards compatibility for axis-angle rotations in glTF 0.8 models. @@ -30,7 +30,7 @@ Change Log * `Material` image uniforms now accept and `HTMLVideoElement` anywhere it could previously take a `Canvas` element. * Added `VideoSynchronizer` helper object for keeping an `HTMLVideoElement` in sync with a scene's clock. * Added 'Video' Sandcastle showcase to demonstrate video materials. -* Added `getOpenStreetMapImageryProvider` function to replace the `OpenStreetMapImageryProvider` class. This function returns a constructed `UrlTemplateImageryProvider`. +* Added `createOpenStreetMapImageryProvider` function to replace the `OpenStreetMapImageryProvider` class. This function returns a constructed `UrlTemplateImageryProvider`. ### 1.15 - 2015-11-02 diff --git a/Source/Scene/ArcGisMapServerImageryProvider.js b/Source/Scene/ArcGisMapServerImageryProvider.js index 15b7405ed2fa..b33237690ab0 100644 --- a/Source/Scene/ArcGisMapServerImageryProvider.js +++ b/Source/Scene/ArcGisMapServerImageryProvider.js @@ -95,7 +95,7 @@ define([ * * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see getOpenStreetMapImageryProvider + * @see createOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/BingMapsImageryProvider.js b/Source/Scene/BingMapsImageryProvider.js index 7a7fc4755f35..1dd2d760645d 100644 --- a/Source/Scene/BingMapsImageryProvider.js +++ b/Source/Scene/BingMapsImageryProvider.js @@ -77,7 +77,7 @@ define([ * * @see ArcGisMapServerImageryProvider * @see GoogleEarthImageryProvider - * @see getOpenStreetMapImageryProvider + * @see createOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/GoogleEarthImageryProvider.js b/Source/Scene/GoogleEarthImageryProvider.js index f4c6c42d10d7..dbd3c28f4bf1 100644 --- a/Source/Scene/GoogleEarthImageryProvider.js +++ b/Source/Scene/GoogleEarthImageryProvider.js @@ -82,7 +82,7 @@ define([ * * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider - * @see getOpenStreetMapImageryProvider + * @see createOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/ImageryProvider.js b/Source/Scene/ImageryProvider.js index 25508ce24305..77ddad6d710c 100644 --- a/Source/Scene/ImageryProvider.js +++ b/Source/Scene/ImageryProvider.js @@ -27,7 +27,7 @@ define([ * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider * @see MapboxImageryProvider - * @see getOpenStreetMapImageryProvider + * @see createOpenStreetMapImageryProvider * @see WebMapTileServiceImageryProvider * @see WebMapServiceImageryProvider * diff --git a/Source/Scene/OpenStreetMapImageryProvider.js b/Source/Scene/OpenStreetMapImageryProvider.js index ba13929d341b..db8ec9999c67 100644 --- a/Source/Scene/OpenStreetMapImageryProvider.js +++ b/Source/Scene/OpenStreetMapImageryProvider.js @@ -68,7 +68,7 @@ define([ * @deprecated */ var OpenStreetMapImageryProvider = function OpenStreetMapImageryProvider(options) { - deprecationWarning('OpenStreetMapImageryProvider', 'OpenStreetMapImageryProvider is deprecated. It will be removed in Cesium 1.18. Use getOpenStreetMapImageryProvider instead.'); + deprecationWarning('OpenStreetMapImageryProvider', 'OpenStreetMapImageryProvider is deprecated. It will be removed in Cesium 1.18. Use createOpenStreetMapImageryProvider instead.'); options = defaultValue(options, {}); var url = defaultValue(options.url, '//a.tile.openstreetmap.org/'); diff --git a/Source/Scene/SingleTileImageryProvider.js b/Source/Scene/SingleTileImageryProvider.js index 638ff9178e84..0409279750a0 100644 --- a/Source/Scene/SingleTileImageryProvider.js +++ b/Source/Scene/SingleTileImageryProvider.js @@ -44,7 +44,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see getOpenStreetMapImageryProvider + * @see createOpenStreetMapImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider * @see WebMapTileServiceImageryProvider diff --git a/Source/Scene/TileMapServiceImageryProvider.js b/Source/Scene/TileMapServiceImageryProvider.js index 7aee45992e8d..cbdcc6fb1c56 100644 --- a/Source/Scene/TileMapServiceImageryProvider.js +++ b/Source/Scene/TileMapServiceImageryProvider.js @@ -65,7 +65,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see getOpenStreetMapImageryProvider + * @see createOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see WebMapServiceImageryProvider * @see WebMapTileServiceImageryProvider diff --git a/Source/Scene/UrlTemplateImageryProvider.js b/Source/Scene/UrlTemplateImageryProvider.js index 3ece8691e53c..b9ace4dadc7b 100644 --- a/Source/Scene/UrlTemplateImageryProvider.js +++ b/Source/Scene/UrlTemplateImageryProvider.js @@ -119,7 +119,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see getOpenStreetMapImageryProvider + * @see createOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/WebMapServiceImageryProvider.js b/Source/Scene/WebMapServiceImageryProvider.js index e04941e3d351..3808f7c5b0f4 100644 --- a/Source/Scene/WebMapServiceImageryProvider.js +++ b/Source/Scene/WebMapServiceImageryProvider.js @@ -73,7 +73,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see getOpenStreetMapImageryProvider + * @see createOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapTileServiceImageryProvider diff --git a/Source/Scene/WebMapTileServiceImageryProvider.js b/Source/Scene/WebMapTileServiceImageryProvider.js index a86f307196a9..9d2712f4045d 100644 --- a/Source/Scene/WebMapTileServiceImageryProvider.js +++ b/Source/Scene/WebMapTileServiceImageryProvider.js @@ -63,7 +63,7 @@ define([ * @see ArcGisMapServerImageryProvider * @see BingMapsImageryProvider * @see GoogleEarthImageryProvider - * @see getOpenStreetMapImageryProvider + * @see createOpenStreetMapImageryProvider * @see SingleTileImageryProvider * @see TileMapServiceImageryProvider * @see WebMapServiceImageryProvider diff --git a/Source/Scene/getOpenStreetMapImageryProvider.js b/Source/Scene/createOpenStreetMapImageryProvider.js similarity index 94% rename from Source/Scene/getOpenStreetMapImageryProvider.js rename to Source/Scene/createOpenStreetMapImageryProvider.js index c50d6037123c..e7289779cce7 100644 --- a/Source/Scene/getOpenStreetMapImageryProvider.js +++ b/Source/Scene/createOpenStreetMapImageryProvider.js @@ -25,7 +25,7 @@ define([ * servers, so you must conform to their * {@link http://wiki.openstreetmap.org/wiki/Tile_usage_policy|Tile Usage Policy}. * - * @exports getOpenStreetMapImageryProvider + * @exports createOpenStreetMapImageryProvider * * @param {Object} [options] Object with the following properties: * @param {String} [options.url='//a.tile.openstreetmap.org'] The OpenStreetMap server url. @@ -52,11 +52,11 @@ define([ * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} * * @example - * var osm = Cesium.getOpenStreetMapImageryProvider({ + * var osm = Cesium.createOpenStreetMapImageryProvider({ * url : '//a.tile.openstreetmap.org/' * }); */ - var getOpenStreetMapImageryProvider = function getOpenStreetMapImageryProvider(options) { + var createOpenStreetMapImageryProvider = function createOpenStreetMapImageryProvider(options) { options = defaultValue(options, {}); var url = defaultValue(options.url, '//a.tile.openstreetmap.org/'); @@ -107,5 +107,5 @@ define([ }); }; - return getOpenStreetMapImageryProvider; + return createOpenStreetMapImageryProvider; }); \ No newline at end of file diff --git a/Source/Widgets/BaseLayerPicker/BaseLayerPicker.js b/Source/Widgets/BaseLayerPicker/BaseLayerPicker.js index 1a66eb863419..13fe8c6ccc8f 100644 --- a/Source/Widgets/BaseLayerPicker/BaseLayerPicker.js +++ b/Source/Widgets/BaseLayerPicker/BaseLayerPicker.js @@ -63,7 +63,7 @@ define([ * tooltip : 'OpenStreetMap (OSM) is a collaborative project to create a free editable \ * map of the world.\nhttp://www.openstreetmap.org', * creationFunction : function() { - * return Cesium.getOpenStreetMapImageryProvider({ + * return Cesium.createOpenStreetMapImageryProvider({ * url : '//a.tile.openstreetmap.org/' * }); * } diff --git a/Source/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js b/Source/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js index 0847708c2c9c..c5340fd341b3 100644 --- a/Source/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js +++ b/Source/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js @@ -5,7 +5,7 @@ define([ '../../Scene/BingMapsImageryProvider', '../../Scene/BingMapsStyle', '../../Scene/MapboxImageryProvider', - '../../Scene/getOpenStreetMapImageryProvider', + '../../Scene/createOpenStreetMapImageryProvider', '../../Scene/TileMapServiceImageryProvider', '../BaseLayerPicker/ProviderViewModel' ], function( @@ -14,7 +14,7 @@ define([ BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, - getOpenStreetMapImageryProvider, + createOpenStreetMapImageryProvider, TileMapServiceImageryProvider, ProviderViewModel) { "use strict"; @@ -149,7 +149,7 @@ mapping applications.\nhttp://www.esri.com', tooltip : 'OpenStreetMap (OSM) is a collaborative project to create a free editable map \ of the world.\nhttp://www.openstreetmap.org', creationFunction : function() { - return getOpenStreetMapImageryProvider({ + return createOpenStreetMapImageryProvider({ url : '//a.tile.openstreetmap.org/' }); } @@ -161,7 +161,7 @@ of the world.\nhttp://www.openstreetmap.org', tooltip : 'Reminiscent of hand drawn maps, Stamen watercolor maps apply raster effect \ area washes and organic edges over a paper texture to add warm pop to any map.\nhttp://maps.stamen.com', creationFunction : function() { - return getOpenStreetMapImageryProvider({ + return createOpenStreetMapImageryProvider({ url : '//stamen-tiles.a.ssl.fastly.net/watercolor/', credit : 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.' }); @@ -173,7 +173,7 @@ area washes and organic edges over a paper texture to add warm pop to any map.\n iconUrl : buildModuleUrl('Widgets/Images/ImageryProviders/stamenToner.png'), tooltip : 'A high contrast black and white map.\nhttp://maps.stamen.com', creationFunction : function() { - return getOpenStreetMapImageryProvider({ + return createOpenStreetMapImageryProvider({ url : '//stamen-tiles.a.ssl.fastly.net/toner/', credit : 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.' }); @@ -186,7 +186,7 @@ area washes and organic edges over a paper texture to add warm pop to any map.\n tooltip : 'OpenStreetMap (OSM) is a collaborative project to create a free editable \ map of the world.\nhttp://www.openstreetmap.org', creationFunction : function() { - return getOpenStreetMapImageryProvider({ + return createOpenStreetMapImageryProvider({ url : '//otile1-s.mqcdn.com/tiles/1.0.0/osm/' }); } diff --git a/Source/Widgets/CesiumWidget/CesiumWidget.js b/Source/Widgets/CesiumWidget/CesiumWidget.js index e55f4ccf90ad..3dccc622191d 100644 --- a/Source/Widgets/CesiumWidget/CesiumWidget.js +++ b/Source/Widgets/CesiumWidget/CesiumWidget.js @@ -168,7 +168,7 @@ define([ * * //Widget with OpenStreetMaps imagery provider and Cesium terrain provider hosted by AGI. * var widget = new Cesium.CesiumWidget('cesiumContainer', { - * imageryProvider : Cesium.getOpenStreetMapImageryProvider(), + * imageryProvider : Cesium.createOpenStreetMapImageryProvider(), * terrainProvider : new Cesium.CesiumTerrainProvider({ * url : '//assets.agi.com/stk-terrain/world' * }), diff --git a/Source/Widgets/Viewer/Viewer.js b/Source/Widgets/Viewer/Viewer.js index 0164194b167f..2ca5f54fb81a 100644 --- a/Source/Widgets/Viewer/Viewer.js +++ b/Source/Widgets/Viewer/Viewer.js @@ -250,7 +250,7 @@ define([ * //Hide the base layer picker * baseLayerPicker : false, * //Use OpenStreetMaps - * imageryProvider : Cesium.getOpenStreetMapImageryProvider({ + * imageryProvider : Cesium.createOpenStreetMapImageryProvider({ * url : '//a.tile.openstreetmap.org/' * }), * // Use high-res stars downloaded from https://github.com/AnalyticalGraphicsInc/cesium-assets diff --git a/Specs/.jshintrc b/Specs/.jshintrc new file mode 100644 index 000000000000..cd9f8b926944 --- /dev/null +++ b/Specs/.jshintrc @@ -0,0 +1,62 @@ +{ + "bitwise": false, + "camelcase": false, + "curly": true, + "eqeqeq": true, + "forin": true, + "freeze": true, + "immed": true, + "latedef": "nofunc", + "newcap": true, + "noarg": true, + "noempty": true, + "nonbsp": true, + "nonew": true, + "plusplus": false, + "quotmark": false, + "undef": true, + "unused": "vars", + "strict": true, + "asi": false, + "boss": false, + "debug": false, + "eqnull": false, + "esnext": false, + "moz": false, + "evil": false, + "expr": false, + "funcscope": false, + "globalstrict": false, + "iterator": false, + "lastsemic": false, + "laxbreak": false, + "laxcomma": false, + "loopfunc": false, + "multistr": true, + "noyield": false, + "notypeof": false, + "proto": false, + "scripturl": false, + "shadow": false, + "sub": false, + "supernew": false, + "validthis": false, + "browser": true, + "browserify": false, + "couch": false, + "devel": true, + "dojo": false, + "jasmine": true, + "jquery": false, + "mocha": true, + "mootools": false, + "node": false, + "nonstandard": false, + "prototypejs": false, + "qunit": false, + "rhino": false, + "shelljs": false, + "worker": false, + "wsh": false, + "yui": false +} \ No newline at end of file diff --git a/Specs/Scene/getOpenStreetMapImageryProviderSpec.js b/Specs/Scene/createOpenStreetMapImageryProviderSpec.js similarity index 91% rename from Specs/Scene/getOpenStreetMapImageryProviderSpec.js rename to Specs/Scene/createOpenStreetMapImageryProviderSpec.js index d6646a51c5d5..0ff77d4435c5 100644 --- a/Specs/Scene/getOpenStreetMapImageryProviderSpec.js +++ b/Specs/Scene/createOpenStreetMapImageryProviderSpec.js @@ -1,6 +1,6 @@ /*global defineSuite*/ defineSuite([ - 'Scene/getOpenStreetMapImageryProvider', + 'Scene/createOpenStreetMapImageryProvider', 'Core/DefaultProxy', 'Core/loadImage', 'Core/Math', @@ -13,7 +13,7 @@ defineSuite([ 'Specs/pollToPromise', 'Scene/UrlTemplateImageryProvider', ], function( - getOpenStreetMapImageryProvider, + createOpenStreetMapImageryProvider, DefaultProxy, loadImage, CesiumMath, @@ -32,12 +32,12 @@ defineSuite([ }); it('return a UrlTemplateImageryProvider', function() { - var provider = getOpenStreetMapImageryProvider(); + var provider = createOpenStreetMapImageryProvider(); expect(provider).toBeInstanceOf(UrlTemplateImageryProvider); }); it('returns valid value for hasAlphaChannel', function() { - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server/' }); @@ -49,7 +49,7 @@ defineSuite([ }); it('supports a slash at the end of the URL', function() { - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server/' }); @@ -71,7 +71,7 @@ defineSuite([ }); it('supports no slash at the endof the URL', function() { - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server' }); @@ -93,7 +93,7 @@ defineSuite([ }); it('requestImage returns a promise for an image and loads it for cross-origin use', function() { - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server/' }); @@ -121,14 +121,14 @@ defineSuite([ }); it('when no credit is supplied, a default one is used', function() { - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server' }); expect(provider.credit).toBeDefined(); }); it('turns the supplied credit into a logo', function() { - var providerWithCredit = getOpenStreetMapImageryProvider({ + var providerWithCredit = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server', credit : 'Thanks to our awesome made up source of this imagery!' }); @@ -137,7 +137,7 @@ defineSuite([ it('routes requests through a proxy if one is specified', function() { var proxy = new DefaultProxy('/proxy/'); - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server', proxy : proxy }); @@ -163,7 +163,7 @@ defineSuite([ it('rectangle passed to constructor does not affect tile numbering', function() { var rectangle = new Rectangle(0.1, 0.2, 0.3, 0.4); - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server', rectangle : rectangle }); @@ -196,7 +196,7 @@ defineSuite([ }); it('uses maximumLevel passed to constructor', function() { - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server', maximumLevel : 5 }); @@ -204,7 +204,7 @@ defineSuite([ }); it('uses minimumLevel passed to constructor', function() { - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server', minimumLevel : 1 }); @@ -212,7 +212,7 @@ defineSuite([ }); it('raises error event when image cannot be loaded', function() { - var provider = getOpenStreetMapImageryProvider({ + var provider = createOpenStreetMapImageryProvider({ url : 'made/up/osm/server' }); @@ -260,7 +260,7 @@ defineSuite([ var rectangle = new Rectangle(0.0, 0.0, CesiumMath.toRadians(1.0), CesiumMath.toRadians(1.0)); expect(function() { - return getOpenStreetMapImageryProvider({ + return createOpenStreetMapImageryProvider({ minimumLevel : 9, rectangle : rectangle }); From 2dbd51e60fddb0ac14649c0155e5533267903e42 Mon Sep 17 00:00:00 2001 From: Matthew Amato Date: Thu, 19 Nov 2015 09:15:35 -0500 Subject: [PATCH 17/17] Delete Specs/.jshintrc It was accidentally added in #3146. --- Specs/.jshintrc | 62 ------------------------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 Specs/.jshintrc diff --git a/Specs/.jshintrc b/Specs/.jshintrc deleted file mode 100644 index cd9f8b926944..000000000000 --- a/Specs/.jshintrc +++ /dev/null @@ -1,62 +0,0 @@ -{ - "bitwise": false, - "camelcase": false, - "curly": true, - "eqeqeq": true, - "forin": true, - "freeze": true, - "immed": true, - "latedef": "nofunc", - "newcap": true, - "noarg": true, - "noempty": true, - "nonbsp": true, - "nonew": true, - "plusplus": false, - "quotmark": false, - "undef": true, - "unused": "vars", - "strict": true, - "asi": false, - "boss": false, - "debug": false, - "eqnull": false, - "esnext": false, - "moz": false, - "evil": false, - "expr": false, - "funcscope": false, - "globalstrict": false, - "iterator": false, - "lastsemic": false, - "laxbreak": false, - "laxcomma": false, - "loopfunc": false, - "multistr": true, - "noyield": false, - "notypeof": false, - "proto": false, - "scripturl": false, - "shadow": false, - "sub": false, - "supernew": false, - "validthis": false, - "browser": true, - "browserify": false, - "couch": false, - "devel": true, - "dojo": false, - "jasmine": true, - "jquery": false, - "mocha": true, - "mootools": false, - "node": false, - "nonstandard": false, - "prototypejs": false, - "qunit": false, - "rhino": false, - "shelljs": false, - "worker": false, - "wsh": false, - "yui": false -} \ No newline at end of file