[OpenLayers-Users] Visibility of features in vector layer
Matthew Doyle
M.Doyle at bom.gov.au
Wed Jul 8 20:38:05 EDT 2009
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 <pagameba at gmail.com> wrote:
>> Eric,
>>
>> On 8-Jul-09, at 9:25 AM, Eric Lemoine wrote:
>>
>>
>> On Wednesday, July 8, 2009, Matthew Doyle <M.Doyle at bom.gov.au> 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 : eric.lemoine at camptocamp.com
> http://www.camptocamp.com
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> 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.
More information about the Users
mailing list