updates to allow a wfs layer to query multiple wfs servers with the same parameters. untested, but all tests pass.

git-svn-id: http://svn.openlayers.org/trunk/openlayers@941 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
euzuro
2006-07-13 12:33:22 +00:00
parent 1e5e8d1490
commit bd9ee403f2
4 changed files with 38 additions and 13 deletions

View File

@@ -93,7 +93,7 @@ OpenLayers.Layer.HTTPRequest.prototype =
},
/** combine the layer's url with its params and these newParams.
/** combine url with layer's params and these newParams.
*
* does checking on the serverPath variable, allowing for cases when it
* is supplied with trailing ? or &, as well as cases where not.
@@ -102,13 +102,17 @@ OpenLayers.Layer.HTTPRequest.prototype =
* "server?key1=value1&key2=value2&key3=value3"
*
* @param {Object} newParams
* @param {String} altUrl Use this as the url instead of the layer's url
*
* @type String
*/
getFullRequestString:function(newParams) {
getFullRequestString:function(newParams, altUrl) {
// use layer's url unless altUrl passed in
var url = (altUrl == null) ? this.url : altUrl;
// requestString always starts with url
var requestString = this.url;
var requestString = url;
// create a new params hash with all the layer params and the
// new params together. then convert to string

View File

@@ -110,11 +110,20 @@ OpenLayers.Layer.WFS.prototype =
* @type OpenLayers.Tile.WFS
*/
addTile:function(bounds, position) {
var url = this.getFullRequestString(
{ BBOX:bounds.toBBOX() });
var urls = new Array();
//add standard URL
urls.push( this.getFullRequestString( { BBOX:bounds.toBBOX() }) );
// if there are more urls, add them.
for(var i=0; i < this.urls.length; i++) {
var newUrl = this.getFullRequestString( { BBOX:bounds.toBBOX() },
this.urls[i] );
urls.push(newUrl);
}
return new OpenLayers.Tile.WFS(this, position, bounds,
url, this.tileSize);
urls, this.tileSize);
},

View File

@@ -19,12 +19,14 @@ OpenLayers.Tile.WFS.prototype =
* @param {OpenLayers.Layer} layer
* @param {OpenLayers.Pixel} position
* @param {OpenLayers.Bounds} bounds
* @param {String} url
* @param {Array} urls
* @param {OpenLayers.Size} size
*/
initialize: function(layer, position, bounds, url, size) {
initialize: function(layer, position, bounds, urls, size) {
var newArguments = [layer, position, bounds, null, size];
OpenLayers.Tile.prototype.initialize.apply(this, arguments);
this.urls = urls;
this.features = new Array();
},
@@ -57,13 +59,17 @@ OpenLayers.Tile.WFS.prototype =
if (!this.loaded) {
if (this.url != "") {
if (this.urls != null) {
// TODO: Hmmm, this stops multiple loads of the data when a
// result isn't immediately retrieved, but it's hacky.
// Do it better.
this.loaded = true;
OpenLayers.loadURL(this.url, null, this, success, failure);
for(var i=0; i < this.urls.length; i++) {
OpenLayers.loadURL(this.urls[i], null, this,
success, failure);
}
}
}
},

View File

@@ -113,7 +113,7 @@
tParams = { layers: 'basic',
format: 'image/png'};
t.plan( 7 );
t.plan( 8 );
// without ?
tUrl = "http://octo.metacarta.com/cgi-bin/mapserv";
@@ -158,6 +158,12 @@
layers:"road" } );
t.eq(str, "http://octo.metacarta.com/cgi-bin/mapserv?param1=5&chicken=6&layers=road", "getFullRequestString() works for layer with null params passing in new params");
// with specified altUrl parameter
tUrl = "http://octo.metacarta.com/cgi-bin/mapserv";
layer = new OpenLayers.Layer.HTTPRequest(name, "chicken", tParams, null);
str = layer.getFullRequestString(null, tUrl);
t.eq(str, "http://octo.metacarta.com/cgi-bin/mapserv?layers=basic&format=image/png", "getFullRequestString() works for url sans ?");
}
function test_99_Layer_HTTPRequest_destroy (t) {