From 61982646ba949e88721472d57444d4ce3b1dab26 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 6 Mar 2013 13:04:56 +0100 Subject: [PATCH 1/4] Allow layers to be passed as an array when creating a map --- src/objectliterals.exports | 2 +- src/ol/map.js | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/objectliterals.exports b/src/objectliterals.exports index 7ed3f72d17..1acfeb2081 100644 --- a/src/objectliterals.exports +++ b/src/objectliterals.exports @@ -1,7 +1,7 @@ @exportObjectLiteral ol.MapOptions @exportObjectLiteralProperty ol.MapOptions.controls Array.|undefined @exportObjectLiteralProperty ol.MapOptions.interactions ol.Collection|undefined -@exportObjectLiteralProperty ol.MapOptions.layers ol.Collection|undefined +@exportObjectLiteralProperty ol.MapOptions.layers Array.|ol.Collection|undefined @exportObjectLiteralProperty ol.MapOptions.renderer ol.RendererHint|undefined @exportObjectLiteralProperty ol.MapOptions.renderers Array.|undefined @exportObjectLiteralProperty ol.MapOptions.target Element|string diff --git a/src/ol/map.js b/src/ol/map.js index 06f997f7b4..8f9af2249f 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -823,8 +823,18 @@ ol.Map.createOptionsInternal = function(mapOptions) { */ var values = {}; - values[ol.MapProperty.LAYERS] = goog.isDef(mapOptions.layers) ? - mapOptions.layers : new ol.Collection(); + var layers; + if (goog.isDef(mapOptions.layers)) { + if (goog.isArray(mapOptions.layers)) { + layers = new ol.Collection(goog.array.clone(mapOptions.layers)); + } else { + goog.asserts.assert(mapOptions.layers instanceof ol.Collection); + layers = mapOptions.layers; + } + } else { + layers = new ol.Collection(); + } + values[ol.MapProperty.LAYERS] = layers; values[ol.MapProperty.VIEW] = goog.isDef(mapOptions.view) ? mapOptions.view : new ol.View2D(); From 441092dad6c772c4a9fc3025660aee699e7d283e Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 6 Mar 2013 13:05:12 +0100 Subject: [PATCH 2/4] Don't use ol.Collection in examples --- examples/anchored-elements.js | 3 +-- examples/canvas-tiles.js | 5 ++--- examples/epsg-4326.js | 5 ++--- examples/full-screen.js | 3 +-- examples/stamen.js | 5 ++--- examples/two-layers.js | 5 ++--- examples/wms-custom-proj.js | 5 ++--- examples/wms.js | 5 ++--- 8 files changed, 14 insertions(+), 22 deletions(-) diff --git a/examples/anchored-elements.js b/examples/anchored-elements.js index 80a27bb4f5..443b0ccf17 100644 --- a/examples/anchored-elements.js +++ b/examples/anchored-elements.js @@ -1,5 +1,4 @@ goog.require('ol.AnchoredElement'); -goog.require('ol.Collection'); goog.require('ol.Coordinate'); goog.require('ol.Map'); goog.require('ol.RendererHints'); @@ -14,7 +13,7 @@ var layer = new ol.layer.TileLayer({ }); var map = new ol.Map({ - layers: new ol.Collection([layer]), + layers: [layer], renderers: ol.RendererHints.createFromQueryData(), target: 'map', view: new ol.View2D({ diff --git a/examples/canvas-tiles.js b/examples/canvas-tiles.js index ecec31b88b..b368c18b6a 100644 --- a/examples/canvas-tiles.js +++ b/examples/canvas-tiles.js @@ -1,4 +1,3 @@ -goog.require('ol.Collection'); goog.require('ol.Coordinate'); goog.require('ol.Map'); goog.require('ol.RendererHint'); @@ -10,7 +9,7 @@ goog.require('ol.source.OpenStreetMap'); goog.require('ol.tilegrid.XYZ'); -var layers = new ol.Collection([ +var layers = [ new ol.layer.TileLayer({ source: new ol.source.OpenStreetMap() }), @@ -22,7 +21,7 @@ var layers = new ol.Collection([ }) }) }) -]); +]; var webglMap = new ol.Map({ view: new ol.View2D({ diff --git a/examples/epsg-4326.js b/examples/epsg-4326.js index 5219ed456a..d9fb194eb8 100644 --- a/examples/epsg-4326.js +++ b/examples/epsg-4326.js @@ -1,4 +1,3 @@ -goog.require('ol.Collection'); goog.require('ol.Coordinate'); goog.require('ol.Map'); goog.require('ol.RendererHint'); @@ -10,7 +9,7 @@ goog.require('ol.projection'); goog.require('ol.source.TiledWMS'); -var layers = new ol.Collection([ +var layers = [ new ol.layer.TileLayer({ source: new ol.source.TiledWMS({ url: 'http://vmap0.tiles.osgeo.org/wms/vmap0', @@ -22,7 +21,7 @@ var layers = new ol.Collection([ } }) }) -]); +]; var map = new ol.Map({ controls: ol.control.defaults({ diff --git a/examples/full-screen.js b/examples/full-screen.js index 6835c39544..07feb1a046 100644 --- a/examples/full-screen.js +++ b/examples/full-screen.js @@ -1,4 +1,3 @@ -goog.require('ol.Collection'); goog.require('ol.Coordinate'); goog.require('ol.Map'); goog.require('ol.RendererHints'); @@ -15,7 +14,7 @@ var map = new ol.Map({ controls: ol.control.defaults({ scaleLine: true }), - layers: new ol.Collection([layer]), + layers: [layer], renderers: ol.RendererHints.createFromQueryData(), target: 'map', view: new ol.View2D({ diff --git a/examples/stamen.js b/examples/stamen.js index 233c04cdb8..ff505b2364 100644 --- a/examples/stamen.js +++ b/examples/stamen.js @@ -1,4 +1,3 @@ -goog.require('ol.Collection'); goog.require('ol.Coordinate'); goog.require('ol.Map'); goog.require('ol.RendererHints'); @@ -7,7 +6,7 @@ goog.require('ol.layer.TileLayer'); goog.require('ol.source.Stamen'); -var layers = new ol.Collection([ +var layers = [ new ol.layer.TileLayer({ source: new ol.source.Stamen({ layer: 'watercolor' @@ -18,7 +17,7 @@ var layers = new ol.Collection([ layer: 'terrain-labels' }) }) -]); +]; var map = new ol.Map({ layers: layers, renderers: ol.RendererHints.createFromQueryData(), diff --git a/examples/two-layers.js b/examples/two-layers.js index e325376b7f..2f23647884 100644 --- a/examples/two-layers.js +++ b/examples/two-layers.js @@ -1,4 +1,3 @@ -goog.require('ol.Collection'); goog.require('ol.Coordinate'); goog.require('ol.Map'); goog.require('ol.RendererHint'); @@ -9,7 +8,7 @@ goog.require('ol.source.BingMaps'); goog.require('ol.source.TileJSON'); -var layers = new ol.Collection([ +var layers = [ new ol.layer.TileLayer({ source: new ol.source.BingMaps({ key: 'AgtFlPYDnymLEe9zJ5PCkghbNiFZE9aAtTy3mPaEnEBXqLHtFuTcKoZ-miMC3w7R', @@ -21,7 +20,7 @@ var layers = new ol.Collection([ uri: 'http://api.tiles.mapbox.com/v3/mapbox.va-quake-aug.jsonp' }) }) -]); +]; var webglMap = new ol.Map({ layers: layers, diff --git a/examples/wms-custom-proj.js b/examples/wms-custom-proj.js index 6aae577534..a27bd2c6e4 100644 --- a/examples/wms-custom-proj.js +++ b/examples/wms-custom-proj.js @@ -1,5 +1,4 @@ goog.require('ol.Attribution'); -goog.require('ol.Collection'); goog.require('ol.Coordinate'); goog.require('ol.Extent'); goog.require('ol.Map'); @@ -20,7 +19,7 @@ var epsg21781 = new ol.Projection('EPSG:21781', ol.ProjectionUnits.METERS, ol.projection.addProjection(epsg21781); var extent = new ol.Extent(420000, 30000, 900000, 350000); -var layers = new ol.Collection([ +var layers = [ new ol.layer.TileLayer({ source: new ol.source.TiledWMS({ url: 'http://wms.geo.admin.ch/', @@ -45,7 +44,7 @@ var layers = new ol.Collection([ params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'} }) }) -]); +]; var map = new ol.Map({ layers: layers, diff --git a/examples/wms.js b/examples/wms.js index d71c133002..3ecef88de8 100644 --- a/examples/wms.js +++ b/examples/wms.js @@ -1,4 +1,3 @@ -goog.require('ol.Collection'); goog.require('ol.Coordinate'); goog.require('ol.Extent'); goog.require('ol.Map'); @@ -9,7 +8,7 @@ goog.require('ol.source.MapQuestOpenAerial'); goog.require('ol.source.TiledWMS'); -var layers = new ol.Collection([ +var layers = [ new ol.layer.TileLayer({ source: new ol.source.MapQuestOpenAerial() }), @@ -21,7 +20,7 @@ var layers = new ol.Collection([ extent: new ol.Extent(-13884991, 2870341, -7455066, 6338219) }) }) -]); +]; var map = new ol.Map({ renderer: ol.RendererHint.CANVAS, layers: layers, From fcbd758f484848a2dd5367a6f2872a2a868d0a55 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 6 Mar 2013 14:54:43 +0100 Subject: [PATCH 3/4] Add ol.Map.addLayer --- src/ol/map.exports | 1 + src/ol/map.js | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/src/ol/map.exports b/src/ol/map.exports index 656ef9cef4..1364db3960 100644 --- a/src/ol/map.exports +++ b/src/ol/map.exports @@ -1,4 +1,5 @@ @exportClass ol.Map ol.MapOptions +@exportProperty ol.Map.prototype.addLayer @exportProperty ol.Map.prototype.addPreRenderFunction @exportProperty ol.Map.prototype.addPreRenderFunctions @exportProperty ol.Map.prototype.getInteractions diff --git a/src/ol/map.js b/src/ol/map.js index 8f9af2249f..a388d92f89 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -292,6 +292,16 @@ ol.Map = function(mapOptions) { goog.inherits(ol.Map, ol.Object); +/** + * @param {ol.layer.Layer} layer Layer. + */ +ol.Map.prototype.addLayer = function(layer) { + var layers = this.getLayers(); + goog.asserts.assert(goog.isDef(layers)); + layers.push(layer); +}; + + /** * @param {ol.PreRenderFunction} preRenderFunction Pre-render function. */ From c48e281c68f928429dd36f37639c74d7ae08f3d0 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 6 Mar 2013 17:17:32 +0100 Subject: [PATCH 4/4] Add ol.Map.removeLayer --- src/ol/map.exports | 1 + src/ol/map.js | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/ol/map.exports b/src/ol/map.exports index 1364db3960..6c0774b39f 100644 --- a/src/ol/map.exports +++ b/src/ol/map.exports @@ -4,6 +4,7 @@ @exportProperty ol.Map.prototype.addPreRenderFunctions @exportProperty ol.Map.prototype.getInteractions @exportProperty ol.Map.prototype.getRenderer +@exportProperty ol.Map.prototype.removeLayer @exportSymbol ol.RendererHint @exportProperty ol.RendererHint.CANVAS diff --git a/src/ol/map.js b/src/ol/map.js index a388d92f89..a687d54fb9 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -629,6 +629,18 @@ ol.Map.prototype.requestRenderFrame = function() { }; +/** + * @param {ol.layer.Layer} layer Layer. + * @return {ol.layer.Layer|undefined} The removed layer or undefined if the + * layer was not found. + */ +ol.Map.prototype.removeLayer = function(layer) { + var layers = this.getLayers(); + goog.asserts.assert(goog.isDef(layers)); + return /** @type {ol.layer.Layer|undefined} */ (layers.remove(layer)); +}; + + /** * @param {number} time Time. * @private