diff --git a/examples/bing-tiles.js b/examples/bing-tiles.js index 7ccbb8375b..90c46c4c95 100644 --- a/examples/bing-tiles.js +++ b/examples/bing-tiles.js @@ -6,7 +6,10 @@ var map = new OpenLayers.Map( 'map'); var road = new OpenLayers.Layer.Bing({ key: apiKey, - type: "Road" + type: "Road", + // custom metadata parameter to request the new map style - only useful + // before May 1st, 2011 + metadataParams: {mapVersion: "v1"} }); var aerial = new OpenLayers.Layer.Bing({ key: apiKey, diff --git a/lib/OpenLayers/Layer/Bing.js b/lib/OpenLayers/Layer/Bing.js index 3fec9eb76d..1f9f1dde9a 100644 --- a/lib/OpenLayers/Layer/Bing.js +++ b/lib/OpenLayers/Layer/Bing.js @@ -42,6 +42,13 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, { * used. Default is "Road". */ type: "Road", + + /** + * APIProperty: metadataParams + * {Object} Optional url parameters for the Get Imagery Metadata request + * as described here: http://msdn.microsoft.com/en-us/library/ff701716.aspx + */ + metadataParams: null, /** * Constant: EVENT_TYPES @@ -106,25 +113,26 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, { var newArgs = [name, null, options]; OpenLayers.Layer.XYZ.prototype.initialize.apply(this, newArgs); - this.loadMetadata(this.type); + this.loadMetadata(); }, /** * Method: loadMetadata - * - * Parameters: - * imageryType - {String} */ - loadMetadata: function(imageryType) { + loadMetadata: function() { this._callbackId = "_callback_" + this.id.replace(/\./g, "_"); // link the processMetadata method to the global scope and bind it // to this instance window[this._callbackId] = OpenLayers.Function.bind( OpenLayers.Layer.Bing.processMetadata, this ); + var params = OpenLayers.Util.applyDefaults({ + key: this.key, + jsonp: this._callbackId, + include: "ImageryProviders" + }, this.metadataParams); var url = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/" + - imageryType + "?key=" + this.key + "&jsonp=" + this._callbackId + - "&include=ImageryProviders"; + this.type + "?" + OpenLayers.Util.getParameterString(params); var script = document.createElement("script"); script.type = "text/javascript"; script.src = url; diff --git a/tests/Layer/Bing.html b/tests/Layer/Bing.html index 15ef3552f5..acf73fdcfe 100644 --- a/tests/Layer/Bing.html +++ b/tests/Layer/Bing.html @@ -13,18 +13,20 @@ }; function test_constructor(t) { - t.plan(2); + t.plan(3); var origProcessMetadata = OpenLayers.Layer.Bing.processMetadata; var log = []; OpenLayers.Layer.Bing.processMetadata = function(metadata) { - log.push(metadata); + var script = document.getElementById(this._callbackId); + log.push(script.src); origProcessMetadata.apply(this, arguments); }; - layer = new OpenLayers.Layer.Bing(options); + layer = new OpenLayers.Layer.Bing({metadataParams: {foo: "bar"}}); t.ok(layer instanceof OpenLayers.Layer.Bing, "returns OpenLayers.Layer.Bing object" ); t.delay_call(2, function() { t.eq(log.length, 1, "processMetadata called"); + t.eq(OpenLayers.Util.getParameters(log[0]).foo, "bar", "metadataParams passed to url correctly."); OpenLayers.Layer.Bing.processMetadata = origProcessMetadata; layer.destroy(); });