Dear list,
I would like to be able to merge a rule created on the fly with an existing SLD 
to style a requested wms layer.
So far, I accept input from the user to filter a wms layer.
The filter works when added to a layer: only the object matching the query 
criteria are added to the map, however the layer is displayed using the default 
orange styling rather than the nice SLD i specified. I am having difficulty 
defining how the layer should be rendered.
I feel it should be:
1. Create a rule according to the user's filter input e.g. "show features where 
size >25"
2. Fetch the SLD corresponding to the layer from Geoserver.
3. Add the new filter rule temporarily to the Existing SLD by merging params, 
thus only showing features matching the filter criteria and rendered according 
to the specified SLD

Step 1, no problem. Step 2. Not sure exactly what the url of the SLD should be, 
but if I define the SLD as a variable in the javascript then I temporarily 
bypass this problem.
Step 3. Im stuck - I cannot figure out how to merge a new rule with an EXISTING 
SLD. I can add the rule to a new SLD, but cannot figure out how to append it to 
an existing style.

I would be really grateful if anyone could help me with:
1. verifying the correct url to reference an existing sld on my geoserver 
installation
2. How to temporarily append/merge the user's filter-rule to the appropriate 
SLD for the layer in order to style the layer correctly.

My code is below.
Many thanks,

Eoin.


The code I am using is:

 /*build a rule based on the user input to the query panel*/

 var rule = new OpenLayers.Rule({
                       filter: panel.getFilter()
 });

 rule.symbolizer[queryPanel.symbolizerType] = symbolizer;

 /**Read the existing SLD: my_sld is an SLD defined as a variable in the 
javascript**/

 var sld = new OpenLayers.Format.SLD().read(my_sld);
 //or read the SLD from geoserver: 
...read("http:.../geoserver/data/styles/mystyle.sld"); -not sure this is 
correct?

 /**merge this rule to an existing style. At present I am merging the rule into 
a NEW sld with no problems, but the new sld does not have the color,line 
properties etc. that I require**/

 var style = new OpenLayers.Style("", {rules: [rule]});
 wms.mergeNewParams({
     sld_body: new OpenLayers.Format.SLD().write({
         namedLayers: [{
             name: panel.selectedLayer.get("name"),
             userStyles: [style]
         }]
     })
 });


      
_______________________________________________
Users mailing list
[email protected]
http://www.geoext.org/cgi-bin/mailman/listinfo/users

Reply via email to