made metadata api parameters configurable. p="Jeff Maki",me r=me (closes #3013)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@11032 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
ahocevar
2011-01-14 13:28:45 +00:00
parent f68ee50a8e
commit 3515d23ce7
3 changed files with 24 additions and 11 deletions
+4 -1
View File
@@ -6,7 +6,10 @@ var map = new OpenLayers.Map( 'map');
var road = new OpenLayers.Layer.Bing({ var road = new OpenLayers.Layer.Bing({
key: apiKey, 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({ var aerial = new OpenLayers.Layer.Bing({
key: apiKey, key: apiKey,
+15 -7
View File
@@ -42,6 +42,13 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
* used. Default is "Road". * used. Default is "Road".
*/ */
type: "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 * Constant: EVENT_TYPES
@@ -106,25 +113,26 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
var newArgs = [name, null, options]; var newArgs = [name, null, options];
OpenLayers.Layer.XYZ.prototype.initialize.apply(this, newArgs); OpenLayers.Layer.XYZ.prototype.initialize.apply(this, newArgs);
this.loadMetadata(this.type); this.loadMetadata();
}, },
/** /**
* Method: loadMetadata * Method: loadMetadata
*
* Parameters:
* imageryType - {String}
*/ */
loadMetadata: function(imageryType) { loadMetadata: function() {
this._callbackId = "_callback_" + this.id.replace(/\./g, "_"); this._callbackId = "_callback_" + this.id.replace(/\./g, "_");
// link the processMetadata method to the global scope and bind it // link the processMetadata method to the global scope and bind it
// to this instance // to this instance
window[this._callbackId] = OpenLayers.Function.bind( window[this._callbackId] = OpenLayers.Function.bind(
OpenLayers.Layer.Bing.processMetadata, this 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/" + var url = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/" +
imageryType + "?key=" + this.key + "&jsonp=" + this._callbackId + this.type + "?" + OpenLayers.Util.getParameterString(params);
"&include=ImageryProviders";
var script = document.createElement("script"); var script = document.createElement("script");
script.type = "text/javascript"; script.type = "text/javascript";
script.src = url; script.src = url;
+5 -3
View File
@@ -13,18 +13,20 @@
}; };
function test_constructor(t) { function test_constructor(t) {
t.plan(2); t.plan(3);
var origProcessMetadata = OpenLayers.Layer.Bing.processMetadata; var origProcessMetadata = OpenLayers.Layer.Bing.processMetadata;
var log = []; var log = [];
OpenLayers.Layer.Bing.processMetadata = function(metadata) { OpenLayers.Layer.Bing.processMetadata = function(metadata) {
log.push(metadata); var script = document.getElementById(this._callbackId);
log.push(script.src);
origProcessMetadata.apply(this, arguments); 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.ok(layer instanceof OpenLayers.Layer.Bing, "returns OpenLayers.Layer.Bing object" );
t.delay_call(2, function() { t.delay_call(2, function() {
t.eq(log.length, 1, "processMetadata called"); 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; OpenLayers.Layer.Bing.processMetadata = origProcessMetadata;
layer.destroy(); layer.destroy();
}); });