[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