[OpenLayers-Commits] r11015 - in trunk/openlayers: lib/OpenLayers/Protocol tests/Protocol

commits-20090109 at openlayers.org commits-20090109 at openlayers.org
Thu Jan 6 16:39:15 EST 2011


Author: tschaub
Date: 2011-01-06 13:39:14 -0800 (Thu, 06 Jan 2011)
New Revision: 11015

Modified:
   trunk/openlayers/lib/OpenLayers/Protocol/HTTP.js
   trunk/openlayers/tests/Protocol/HTTP.html
Log:
Optionally include SRS id in serialized BBOX by constructing a HTTP protocol with srsInBBOX true.  r=elemoine (closes #3006).

Modified: trunk/openlayers/lib/OpenLayers/Protocol/HTTP.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Protocol/HTTP.js	2011-01-05 19:34:59 UTC (rev 11014)
+++ trunk/openlayers/lib/OpenLayers/Protocol/HTTP.js	2011-01-06 21:39:14 UTC (rev 11015)
@@ -80,6 +80,15 @@
     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 @@
                 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;

Modified: trunk/openlayers/tests/Protocol/HTTP.html
===================================================================
--- trunk/openlayers/tests/Protocol/HTTP.html	2011-01-05 19:34:59 UTC (rev 11014)
+++ trunk/openlayers/tests/Protocol/HTTP.html	2011-01-06 21:39:14 UTC (rev 11015)
@@ -199,29 +199,43 @@
     }
 
     function test_read_bbox(t) {
-        t.plan(1);
-        var protocol = new OpenLayers.Protocol.HTTP();
+        t.plan(6);
 
-        // fake XHR request object
-        var request = {'status': 200};
-
         var _get = OpenLayers.Request.GET;
 
         var bounds = new OpenLayers.Bounds(1, 2, 3, 4);
         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;        
     }
 



More information about the Commits mailing list