Dynamic Styling and Filtering of a Geoserver WMS Using OpenLayers.Layer.WMS.Post
There is a new layer class in OpenLayers API: OpenLayers.Layer.WMS.Post [1]. – Great work!
While the “normal” OpenLayers.Layer.WMS class requests maps via HTTP GET, this new class sends the request via HTTP POST. This way, we can now send big client-side created SLD files in our GetMap requests that used to exceed size limits of GET.
This code snippet shows the basic use of OpenLayers.Layer.WMS.Post with a client-side created SLD. You’ll need at least OpenLayers 2.9 to test this on your server. (A full example can be found at http://www.openlayers.org/dev/examples/wms-long-url.html)
var sld = 'define your SLD here'; wms = new OpenLayers.Layer.WMS.Post( "name", "http://localhost:8080/geoserver/wms", { 'layers': 'myNs:layername', format: 'image/jpeg', sld_body: sld }, { unsupportedBrowsers: [] } );
Setting unsupportedBrowsers to an empty list is important! This list by default contains [“mozilla”, “firefox”, “opera”]. These browsers support long GET requests so the developers argued that these browsers wouldn’t need to use POST. Well, turns out that they do ;)
I performed a small stress test using an SLD with approximately 1,000 rules being applied on a big city road network. While my browser would willingly send a GET request of that size, Apache doesn’t want to accept it. So, I tried the POST way and it turns out that it really works! (But it’s slow, very slow …)
Thanks to the developers for yet another great feature!
Pingback: The Missing In Operator – OGC Filter Standards « GIS rumblings