hi, the reason why it does not work is that you are using Layer.WFS, which will load features for the visible extent after a pan/zoom. This means that your modified features get removed, and replaced by fresh ones from the server.
I see that you set the visibility based on a feature attribute. In this case it would be best to set the visibility with a context in the stylemap. See the stylemap-context.html example to see what I mean. Regards, Andreas. On 7/9/09, Matthew Doyle <[email protected]> wrote: > > Hi Eric, Andreas and Paul, > > Many thanks for getting back to me, and thanks for the suggestions. I have > tried both ways, and the features still don't remember which renderIntent or > "style" they have been changed to, always reverting back to the default. > > Andreas - I did have a styleMap called "hidden" but i've now renamed that to > "delete" as suggested, I had assumed you could create your own renderIntent > names paired with Style objects, now I realise it's best to stick with > default, selected and delete. > > Here's my code: I hope you can perhaps see where I am going wrong? > First, the StyleMaps and WFS Layer instantiation: > > var pacificStyleMap = new OpenLayers.StyleMap({ > "default": { > externalGraphic : "/ol/img/capital-city.png", > cursor: "pointer", > graphicWidth : 10, > graphicHeight : 10, > graphicXOffset : -6, > graphicYOffset : -6, > graphicOpacity : 1 > }, > "select": { > externalGraphic : "/ol/img/capital-city.png", > cursor: "pointer", > graphicWidth : 12, > graphicHeight : 12, > graphicXOffset : -7, > graphicYOffset : -7, > graphicOpacity : 1 > }, > "delete": { > display: "none" > } > }); > > pacificWFS = new OpenLayers.Layer.WFS('Weather Stations', > OpenLayers.serviceURL, {typename: 'PI-STATIONS', format: > OpenLayers.Format.WFS}, { > extractAttributes: true, > displayOutsideMaxExtent: true, > styleMap: pacificStyleMap > }); > > > (... and then the function which is trying to hide/show the features) > > > function toggleDataType(dataType) { > var renderIntent; > for(var i = 0; i< pacificWFS.features.length; i++) { > if(dataType == "rain") { > if(pacificWFS.features[i].attributes.rain != "True") { > renderIntent = "delete"; > } else { > renderIntent = "default"; > } > } else if(dataType == "tmax") { > if(pacificWFS.features[i].attributes.tmax != "True") { > renderIntent = "delete"; > } else { > renderIntent = "default"; > } > } > pacificWFS.features[i].renderIntent = renderIntent; > pacificWFS.drawFeature(pacificWFS.features[i]); > } > } > > > The toggleDataType(dataType) is called onclick from a drop-down menu, all is > working well with this as i have debugged the code thoroughly. I have 30 > features, and they have differing dataType attributes. > > I hope you guys can spot something that i'm missing here. > > I have also tried Eric's suggestion: > pacificWFS.features[i].style = > OpenLayers.Feature.Vector.style["delete"]; > instead of setting the renderIntent at the bottom of the loop. In either > method, the features do hide, but as soon as i pan around or zoom (causing a > redraw) then the features come back. > > Best regards, > Matt > > > > > > Eric Lemoine-2-2 wrote: >> >> On Wednesday, July 8, 2009, Paul Spencer <[email protected]> wrote: >>> Eric, >>> >>> On 8-Jul-09, at 9:25 AM, Eric Lemoine wrote: >>> >>> >>> On Wednesday, July 8, 2009, Matthew Doyle <[email protected]> wrote: >>> >>> >>> Hello all, >>> >>> Sorry for resurrecting this topic, but i am having trouble getting my >>> features to "remember" which StylemMap they have been changed to, using >>> the >>> renderIntent. >>> >>> After following Heidtmare's suggestions below, my WFS layer is now >>> showing >>> and hiding features on the fly using the renderIntent and then calling >>> drawFeature, as follows: >>> >>> for(var i = 0; i < WFSLayer.features.length; i++) { >>> WFSLayer.features[i].renderIntent = "hidden"; >>> WFSLayer.drawFeature(WFSLayer.features[i]); >>> } >>> >>> This works great, right up until i zoom the map or move to a different >>> extent. Each feature goes back to their "default" renderIntent and the >>> features are shown once again. >>> >>> How can i force a permanent change for each feature so that when the user >>> zooms it remembers what changes have just been made? >>> >>> >>> Hi >>> >>> You can use the "style" property. E.g. >>> >>> feature.style = OpenLayers.Feature.Vector.style["delete"]; >>> >>> >>> >>> why does the renderIntent approach not work? It does work for controls >>> like SelectFeature. From what I see in the code, the renderIntent of the >>> feature is changed in createSymbolizer called from drawFeature, which >>> should use the renderIntent of the feature (in this case, 'hidden'). >>> Unless the style map doesn't contain a 'hidden' style, in which case it >>> would default back to ... um ... 'default' :) >> >> >> I agree with your reasonning Paul - setting feature.renderIntent to >> "delete" should work equally. >> >> >>> >>> Paul >>> >>> >> >> -- >> Eric Lemoine >> >> Camptocamp France SAS >> Savoie Technolac, BP 352 >> 73377 Le Bourget du Lac, Cedex >> >> Tel : 00 33 4 79 44 44 96 >> Mail : [email protected] >> http://www.camptocamp.com >> _______________________________________________ >> Users mailing list >> [email protected] >> http://openlayers.org/mailman/listinfo/users >> >> > > -- > View this message in context: > http://n2.nabble.com/Visibility-of-features-in-vector-layer-tp2792029p3228871.html > Sent from the OpenLayers Users mailing list archive at Nabble.com. > _______________________________________________ > Users mailing list > [email protected] > http://openlayers.org/mailman/listinfo/users > -- Sent from my mobile device Andreas Hocevar OpenGeo - http://opengeo.org/ Expert service straight from the developers. _______________________________________________ Users mailing list [email protected] http://openlayers.org/mailman/listinfo/users
