diff --git a/lib/OpenLayers/Protocol/HTTP.js b/lib/OpenLayers/Protocol/HTTP.js index a0b910b729..d03c7d6367 100644 --- a/lib/OpenLayers/Protocol/HTTP.js +++ b/lib/OpenLayers/Protocol/HTTP.js @@ -79,6 +79,15 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, { */ wildcarded: false, + /** + * APIProperty: srsInBBOX + * {Boolean} Include the SRS identifier in BBOX query string parameter. + * Default is false. If true and the layer has a projection object set, + * any BBOX filter will be serialized with a fifth item identifying the + * projection. E.g. bbox=-1000,-1000,1000,1000,EPSG:900913 + */ + srsInBBOX: false, + /** * Constructor: OpenLayers.Protocol.HTTP * A class for giving layers generic HTTP protocol. @@ -200,6 +209,9 @@ OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, { switch(filter.type) { case OpenLayers.Filter.Spatial.BBOX: params.bbox = filter.value.toArray(); + if (this.srsInBBOX && filter.projection) { + params.bbox.push(filter.projection.getCode()); + } break; case OpenLayers.Filter.Spatial.DWITHIN: params.tolerance = filter.distance; diff --git a/tests/Protocol/HTTP.html b/tests/Protocol/HTTP.html index 16f6da259b..9716a9b7b3 100644 --- a/tests/Protocol/HTTP.html +++ b/tests/Protocol/HTTP.html @@ -199,11 +199,7 @@ } function test_read_bbox(t) { - t.plan(1); - var protocol = new OpenLayers.Protocol.HTTP(); - - // fake XHR request object - var request = {'status': 200}; + t.plan(6); var _get = OpenLayers.Request.GET; @@ -211,16 +207,34 @@ var filter = new OpenLayers.Filter.Spatial({ type: OpenLayers.Filter.Spatial.BBOX, value: bounds, - projection: "foo" + projection: new OpenLayers.Projection("foo") }); + // log requests + var log, exp; OpenLayers.Request.GET = function(options) { - t.eq(options.params['bbox'].toString(), bounds.toArray().toString(), - 'GET called with bbox filter in params'); - return request; + log.push(options.params.bbox); + return {status: 200}; }; - var resp = protocol.read({filter: filter}); + // 1) issue request with default protocol + log = []; + new OpenLayers.Protocol.HTTP().read({filter: filter}); + + t.eq(log.length, 1, "1) GET called once"); + t.ok(log[0] instanceof Array, "1) bbox param is array"); + exp = bounds.toArray(); + t.eq(log[0], exp, "1) bbox param doesn't include SRS id by default"); + + // 2) issue request with default protocol + log = []; + new OpenLayers.Protocol.HTTP({srsInBBOX: true}).read({filter: filter}); + + t.eq(log.length, 1, "2) GET called once"); + t.ok(log[0] instanceof Array, "2) bbox param is array"); + exp = bounds.toArray(); + exp.push("foo"); + t.eq(log[0], exp, "2) bbox param includes SRS id if srsInBBOX is true"); OpenLayers.Request.GET = _get; }