Thanks for the update Andreas!

So now, it works... almost! Now, there is a problem when I apply the selected style: when I add the layer without a style, it works, but when I try to apply a style to a layer with a SLD file, it doesn't work. What is quite strange is that, when I load a layer, I can see the layer while 1 second, until the style is effectively applied! Here is the code for my "add layer" button, which allows to load a selected layer from my tree. I apply the layer style at this moment because it avoids to load all the style when I build my tree. The style is loaded only when the layer is added.

bbar: ['->',{
        text: "Add to the map",
        handler: function() {
                var node = layerCatalog.getSelectionModel().getSelectedNode();
                if(node) {
                        var sld;
                        var layername = node.attributes.layer.name;
                        var url_sld = "sld/"+layername+".xml";
                        var format_sld = new OpenLayers.Format.SLD();
                        
                        function setLayerStyles() {
                                // set the default style for each layer from sld
                                for (var l in sld.namedLayers) {
                                        var styles = 
sld.namedLayers[l].userStyles, style;
                                        for (var i=0,ii=styles.length; i<ii; 
++i) {
                                                style = styles[i];
                                                
node.attributes.layer.styleMap.styles["default"] = style;
                                                break;
                                        }
                                }
                        }
                        
                        function complete(req) {
                                sld = format_sld.read(req.responseXML || 
req.responseText);
                                setLayerStyles();
                        }

                        OpenLayers.loadURL(url_sld, null, null, complete);
                        mapPanel.map.addLayer(node.attributes.layer);
                }
        }
}]

Any idea?

Geoffrey



On Tue, 19 Jul 2011 12:54:34 +0200, Andreas Hocevar <[email protected]> wrote:

Hi,

you may want to have a look at the updated sld example
(http://openlayers.org/dev/examples/sld.html). Especially at the
setLayerStyles function in http://openlayers.org/dev/examples/sld.js,
which shows you how to link the styles to an already existing StyleMap
of a layer.

Andreas.

On Tue, Jul 19, 2011 at 8:26 AM, gbrun <[email protected]> wrote:
Thanks for your reply!

So I tried to so something with the LoadURL. The SLD file is well called (I can see it in firebug), but the problem is that I now don't know how to link it with its layer. I'm still a newbie in webmapping. I think, what I want to
do is quite easy, but I'm still not used to! Here is my current code:

               createWFSLayer: function(data, featureType) {

                       //Style definition
                       var sld;
                       var layername = featureType.name;
                       var url_sld = "sld/"+layername+".xml";

                       var format_sld = new OpenLayers.Format.SLD();

                       OpenLayers.loadURL(url_sld, null, null, complete)

                       function getDefaultStyle(sld, layerName) {
                               var styles =
sld.namedLayers[layerName].userStyles;
                               var style;
                               for(var i=0; i<styles.length; ++i) {
                                       style = styles[i];
                                       if(style.isDefault) {
                                               break;
                                       }
                               }
                               return style;
                       };

                       function complete(req) {
                               sld = format_sld.read(req.responseXML ||
req.responseText);

                               var styleMap = new OpenLayers.StyleMap({
                                               "default":
getDefaultStyle(sld, layername)
                               });
                               return styleMap;
                       }

                       var styleWFS = {styleMap: styleMap}

                       //Layer options
                       var layerOptions, protocolOptions;
                       //Layer options definition
                       protocolOptions = {
                               url:
data.capability.request.getfeature.href.post,
                               featureType: featureType.name,
                               featureNS: featureType.featureNS,
                               outputFormat: "json",
readFormat: new OpenLayers.Format.GeoJSON()
                       };
                       //Layer protocol definition
                       layerOptions = {
                               protocol: new
OpenLayers.Protocol.WFS(protocolOptions),
strategies: [new OpenLayers.Strategy.Fixed()]
                       };
                       return  new OpenLayers.Layer.Vector(
                               featureType.title,
                               layerOptions,
                               styleWFS
                       );
               },

My problem comes from the "complete" function. I can't get its result for
the styleMap property of my layer!

Geoffrey


On Mon, 18 Jul 2011 18:17:07 +0200, Arnd Wippermann <[email protected]>
wrote:

Hi,

As far as I know you can't load data with OpenLayers.Format.SLD(url). You
have to do it with an ajax call, i.e LoadUrl.

Arnd

-----Ursprüngliche Nachricht-----
Von: [email protected]
[mailto:[email protected]] Im Auftrag von gbrun
Gesendet: Montag, 18. Juli 2011 12:32
An: [email protected]
Betreff: [OpenLayers-Users] Call a SLD file for a Vector Layer

Hi list!

I would like to apply SLD styles to my vector layers. It should work like
in
this example : http://www.openlayers.org/dev/examples/sld.html

But what I want to do is a little bit different: each layer has its own
style. So I want that each vector layer calls its default style from a
folder in my web application where styles are stored with the same name as their specific layer. For example, my application has a vector layer named
"vector". In this case, this layer must called a SLD file named
"vector.xml".

The OpenLayers example uses a "OpenLayers.LoadURL()" method. I'm looking
for
a different way: I would like to read the SLD response without this
method.
It should look like this:

var url_sld = "../sld/"+featureType.name+".xml";
                       var format_sld = new
OpenLayers.Format.SLD(url_sld);

                       processResponse : function (response){
                               var sld =
format_sld.read(response.responseXML ||
response.responseText);
                       };

But it doesn't work. I think, there is something that I don't understand
when I read the SLD response.

Can someone clarify me this?

Geoffrey


--
Using Opera's revolutionary email client: http://www.opera.com/mail/
_______________________________________________
Users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/openlayers-users



--
Using Opera's revolutionary email client: http://www.opera.com/mail/
_______________________________________________
Users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/openlayers-users






--
Using Opera's revolutionary email client: http://www.opera.com/mail/
_______________________________________________
Users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/openlayers-users

Reply via email to