Ok

I finally found a solution (not sure it's the easier solution but it's
working in all case

When declaring StyleMap I add this Rule:

new OpenLayers.Rule({
                            name : "changestate",
                            symbolizer: { "Polygon": { display : "none"} },
                            filter: new OpenLayers.Filter.FeatureId({fids :
[]})
                            })

So currently this has no impact, as the list of features id is empty.

Now, in my changestate function (this function is called when a feature
status must be changed : show/hide)

                features = layer.features;
                unactivelist = new Array(); // List of feature ids to hide
                n = 0;
                for(i=0;i<dtnode.parent.childList.length;i++) { // I am
using dynatree (tree with checkbox)

                    // if style is defined (no stylemap associated) normal
case, just style.display = "none"
                    if (features[i].style) {
                        if (dtnode.parent.childList[i].isSelected())
                            features[i].style.display = "block";
                        else
                            features[i].style.display = "none";
                    } else {
                        if (!dtnode.parent.childList[i].isSelected())//
checkbox not active so add to unactive
                            unactivelist[n++] = features[i].id;
                        }
                    }
               }

               //Get layer.stylemap.style.rules.filter and change fids to
the new list, redraw the layer
                    style = layer.styleMap.styles["default"];
                    for(j=0;j<style.rules.length;j++)
                    {
                        if (style.rules[j].name == 'changestate')
                        {
                            style.rules[j].filter.fids = unactivelist;
                        }
                    }

                }
                layer.redraw();




2010/8/4 Thomas PAPIN <thomas.pa...@gmail.com>

> Hi, it's again me :)
>
> When I want to hide/show a feature, I just do in a normal case:
> feature.style.display = "none";
> This is working great.
>
> But in the following case it's not working, and I don't have what to do.
>
> - I have a KML with placemark (Point and Polygon)
> - Each Placemark have attributes like (fontColor,label,labeloffestY)
> - I used a StyleMap to style the features of this KML
> like that:
> var extraMap = new OpenLayers.StyleMap({'default':{
>             fillOpacity: 1,
>             pointRadius: "${pointSize}",
>             label : "${label}",
>             fontColor: "${fontColor}",
>             fontSize: "${labelSize}px",
>            ....
>
> GMLlayer = new OpenLayers.Layer.GML(json.files[i].name, json.files[i].kml,
>                                             {
>                                                 format:
> OpenLayers.Format.KML,
>                                                 formatOptions: {
>                                                     extractStyles: true,
>                                                     extractAttributes:
> true,
>                                                     maxDepth: 2
>                                                     },
>                                                 styleMap: style
>                                             });
>
> Then when I tried to do feature.style.display but feature.style is not
> defined.
>
> What can I do :-( ?
>
_______________________________________________
Dev mailing list
Dev@openlayers.org
http://openlayers.org/mailman/listinfo/dev

Reply via email to