diff --git a/examples/stamen.html b/examples/stamen.html new file mode 100644 index 0000000000..0b0f9ef71d --- /dev/null +++ b/examples/stamen.html @@ -0,0 +1,42 @@ + + + + + + + + + Stamen example + + +
+
+

Stamen example

+
Example of a Stamen tile source.
+
+

See the + stamen.js source + to see how this is done.

+
+
+
+
fullscreen, stamen, tilelayer
+ + + diff --git a/examples/stamen.js b/examples/stamen.js new file mode 100644 index 0000000000..3c947baf84 --- /dev/null +++ b/examples/stamen.js @@ -0,0 +1,31 @@ +goog.require('ol.Collection'); +goog.require('ol.Coordinate'); +goog.require('ol.Map'); +goog.require('ol.RendererHints'); +goog.require('ol.View2D'); +goog.require('ol.layer.TileLayer'); +goog.require('ol.source.Stamen'); + + +var layers = new ol.Collection([ + new ol.layer.TileLayer({ + source: new ol.source.Stamen({ + layer: 'watercolor' + }) + }), + new ol.layer.TileLayer({ + source: new ol.source.Stamen({ + layer: 'terrain-labels' + }) + }) +]); +var map = new ol.Map({ + layers: layers, + renderers: ol.RendererHints.createFromQueryData(), + scaleLineControl: true, + target: 'map', + view: new ol.View2D({ + center: new ol.Coordinate(0, 0), + zoom: 3 + }) +}); diff --git a/src/objectliterals.exports b/src/objectliterals.exports index ce2ad2c57b..3a387638b6 100644 --- a/src/objectliterals.exports +++ b/src/objectliterals.exports @@ -113,8 +113,11 @@ @exportObjectLiteralProperty ol.source.SingleImageWMSOptions.url string|undefined @exportObjectLiteral ol.source.StamenOptions -@exportObjectLiteralProperty ol.source.StamenOptions.flavor string|undefined -@exportObjectLiteralProperty ol.source.StamenOptions.provider string +@exportObjectLiteralProperty ol.source.StamenOptions.layer string +@exportObjectLiteralProperty ol.source.StamenOptions.minZoom number|undefined +@exportObjectLiteralProperty ol.source.StamenOptions.maxZoom number|undefined +@exportObjectLiteralProperty ol.source.StamenOptions.opaque boolean|undefined +@exportObjectLiteralProperty ol.source.StamenOptions.url string|undefined @exportObjectLiteral ol.source.StaticImageOptions @exportObjectLiteralProperty ol.source.StaticImageOptions.attributions Array.|undefined diff --git a/src/ol/source/stamen.exports b/src/ol/source/stamen.exports index 40b2c8b0e7..697330485e 100644 --- a/src/ol/source/stamen.exports +++ b/src/ol/source/stamen.exports @@ -1,21 +1 @@ @exportSymbol ol.source.Stamen - -@exportSymbol ol.source.StamenFlavor -@exportProperty ol.source.StamenFlavor.TERRAIN_BACKGROUND -@exportProperty ol.source.StamenFlavor.TERRAIN_LABELS -@exportProperty ol.source.StamenFlavor.TERRAIN_LINES -@exportProperty ol.source.StamenFlavor.TONER_2010 -@exportProperty ol.source.StamenFlavor.TONER_2011 -@exportProperty ol.source.StamenFlavor.TONER_2011_LABELS -@exportProperty ol.source.StamenFlavor.TONER_2011_LINES -@exportProperty ol.source.StamenFlavor.TONER_2011_LITE -@exportProperty ol.source.StamenFlavor.TONER_BACKGROUND -@exportProperty ol.source.StamenFlavor.TONER_HYBRID -@exportProperty ol.source.StamenFlavor.TONER_LABELS -@exportProperty ol.source.StamenFlavor.TONER_LINES -@exportProperty ol.source.StamenFlavor.TONER_LITE - -@exportSymbol ol.source.StamenProvider -@exportProperty ol.source.StamenProvider.TERRAIN -@exportProperty ol.source.StamenProvider.TONER -@exportProperty ol.source.StamenProvider.WATERCOLOR diff --git a/src/ol/source/stamensource.js b/src/ol/source/stamensource.js index 90355bf1e5..6ea87b6ab4 100644 --- a/src/ol/source/stamensource.js +++ b/src/ol/source/stamensource.js @@ -1,61 +1,76 @@ -// FIXME Configure minZoom when supported by TileGrid - goog.provide('ol.source.Stamen'); -goog.provide('ol.source.StamenFlavor'); -goog.provide('ol.source.StamenProvider'); goog.require('ol.Attribution'); goog.require('ol.source.XYZ'); /** - * @enum {string} + * @type {Object.} */ -ol.source.StamenFlavor = { - TERRAIN_BACKGROUND: 'background', - TERRAIN_LABELS: 'labels', - TERRAIN_LINES: 'lines', - TONER_2010: '2010', - TONER_2011: '2011', - TONER_2011_LABELS: '2011-labels', - TONER_2011_LINES: '2011-lines', - TONER_2011_LITE: '2011-lite', - TONER_BACKGROUND: 'background', - TONER_HYBRID: 'hybrid', - TONER_LABELS: 'labels', - TONER_LINES: 'lines', - TONER_LITE: 'lite' +ol.source.StamenLayerConfig = { + 'terrain': { + extension: 'jpg', + opaque: true + }, + 'terrain-background': { + extension: 'jpg', + opaque: true + }, + 'terrain-labels': { + extension: 'png', + opaque: false + }, + 'terrain-lines': { + extension: 'png', + opaque: false + }, + 'toner-background': { + extension: 'png', + opaque: true + }, + 'toner': { + extension: 'png', + opaque: true + }, + 'toner-hybrid': { + extension: 'png', + opaque: false + }, + 'toner-labels': { + extension: 'png', + opaque: false + }, + 'toner-lines': { + extension: 'png', + opaque: false + }, + 'toner-lite': { + extension: 'png', + opaque: true + }, + 'watercolor': { + extension: 'jpg', + opaque: true + } }; /** - * @enum {string} + * @type {Object.} */ -ol.source.StamenProvider = { - TERRAIN: 'terrain', - TONER: 'toner', - WATERCOLOR: 'watercolor' -}; - - -/** - * @type {Object.} - */ -ol.source.StamenProviderConfig = {}; -ol.source.StamenProviderConfig[ol.source.StamenProvider.TERRAIN] = { - type: 'jpg', - minZoom: 4, - maxZoom: 18 -}; -ol.source.StamenProviderConfig[ol.source.StamenProvider.TONER] = { - type: 'png', - minZoom: 0, - maxZoom: 20 -}; -ol.source.StamenProviderConfig[ol.source.StamenProvider.WATERCOLOR] = { - type: 'jpg', - minZoom: 3, - maxZoom: 16 +ol.source.StamenProviderConfig = { + 'terrain': { + minZoom: 4, + maxZoom: 18 + }, + 'toner': { + minZoom: 0, + maxZoom: 20 + }, + 'watercolor': { + minZoom: 3, + maxZoom: 16 + } }; @@ -63,9 +78,9 @@ ol.source.StamenProviderConfig[ol.source.StamenProvider.WATERCOLOR] = { /** * @constructor * @extends {ol.source.XYZ} - * @param {ol.source.StamenOptions} stamenOptions Stamen options. + * @param {ol.source.StamenOptions} options Options. */ -ol.source.Stamen = function(stamenOptions) { +ol.source.Stamen = function(options) { var attribution = new ol.Attribution( 'Map tiles by Stamen Design, ' + @@ -75,18 +90,25 @@ ol.source.Stamen = function(stamenOptions) { 'under ' + 'CC BY SA.'); - var layer = stamenOptions.provider; - if (goog.isDef(stamenOptions.flavor)) { - layer += '-' + stamenOptions.flavor; - } + var i = options.layer.indexOf('-'); + var provider = i == -1 ? options.layer : options.layer.slice(0, i); + goog.asserts.assert(provider in ol.source.StamenProviderConfig); + var providerConfig = ol.source.StamenProviderConfig[provider]; - var config = ol.source.StamenProviderConfig[stamenOptions.provider]; + goog.asserts.assert(options.layer in ol.source.StamenLayerConfig); + var layerConfig = ol.source.StamenLayerConfig[options.layer]; + + var url = goog.isDef(options.url) ? options.url : + 'http://{a-d}.tile.stamen.com/' + options.layer + '/{z}/{x}/{y}.' + + layerConfig.extension; goog.base(this, { attributions: [attribution], - maxZoom: config.maxZoom, - opaque: false, - url: 'http://{a-d}.tile.stamen.com/' + layer + '/{z}/{x}/{y}.' + config.type + maxZoom: providerConfig.maxZoom, + // FIXME uncomment the following when tilegrid supports minZoom + //minZoom: providerConfig.minZoom, + opaque: layerConfig.opaque, + url: url }); };