diff --git a/CHANGES.md b/CHANGES.md index b2dc69a34ec2..6d5eab321bf9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ Change Log * Fixed a bug with rotated, textured rectangles. [#4430](https://github.com/AnalyticalGraphicsInc/cesium/pull/4430) * Fixed a bug when morphing from 2D to 3D. [#4388](https://github.com/AnalyticalGraphicsInc/cesium/pull/4388) * Added `Rectangle.simpleIntersection`. +* Added the ability to specify retina options, such as `@2x.png`, via the `MapboxImageryProvider` `format` option. * Removed an unnecessary reprojection of Web Mercator imagery tiles to the Geographic projection on load. This should improve both visual quality and load performance slightly. ### 1.26 - 2016-10-03 diff --git a/Source/Scene/MapboxImageryProvider.js b/Source/Scene/MapboxImageryProvider.js index a370da23ef4c..c308f02a2da7 100644 --- a/Source/Scene/MapboxImageryProvider.js +++ b/Source/Scene/MapboxImageryProvider.js @@ -66,13 +66,16 @@ define([ this._mapId = mapId; this._accessToken = MapboxApi.getAccessToken(options.accessToken); var format = defaultValue(options.format, 'png'); - this._format = format.replace('.', ''); + if (!/\./.test(format)) { + format = '.' + format; + } + this._format = format; var templateUrl = url; if (!trailingSlashRegex.test(url)) { templateUrl += '/'; } - templateUrl += mapId + '/{z}/{x}/{y}.' + this._format; + templateUrl += mapId + '/{z}/{x}/{y}' + this._format; if (defined(this._accessToken)) { templateUrl += '?access_token=' + this._accessToken; } diff --git a/Specs/Scene/MapboxImageryProviderSpec.js b/Specs/Scene/MapboxImageryProviderSpec.js index 359df6c2098d..60e382b7b092 100644 --- a/Specs/Scene/MapboxImageryProviderSpec.js +++ b/Specs/Scene/MapboxImageryProviderSpec.js @@ -280,4 +280,50 @@ defineSuite([ }); }); }); + + it('appends specified format', function() { + var provider = new MapboxImageryProvider({ + url : 'made/up/mapbox/server/', + mapId: 'test-id', + format: '@2x.png' + }); + + return pollToPromise(function() { + return provider.ready; + }).then(function() { + spyOn(loadImage, 'createImage').and.callFake(function(url, crossOrigin, deferred) { + expect(/made\/up\/mapbox\/server\/test-id\/0\/0\/0@2x\.png\?access_token=/.test(url)).toBe(true); + + // 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(); + }); + }); + }); + + it('adds missing period for format', function() { + var provider = new MapboxImageryProvider({ + url : 'made/up/mapbox/server/', + mapId: 'test-id', + format: 'png' + }); + + return pollToPromise(function() { + return provider.ready; + }).then(function() { + spyOn(loadImage, 'createImage').and.callFake(function(url, crossOrigin, deferred) { + expect(/made\/up\/mapbox\/server\/test-id\/0\/0\/0\.png\?access_token=/.test(url)).toBe(true); + + // 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(); + }); + }); + }); });