[OpenLayers-Users] addUniqueValueRules causes feature to disappear instead of changing it's style

Alexandre Dubé adube at mapgears.com
Thu Aug 9 10:54:00 PDT 2012


Hi Christian,

   I would seem that even thought you send the feature itself as 
context, it will ends up using the feature.attributes hash anyway.  You 
can see for yourself by loading an uncompressed version of OpenLayers, 
put a breakpoint inside your context method until you get to that line :

     OpenLayers/Filter/Comparison.js :

     evaluate: function(context) {
         if (context instanceof OpenLayers.Feature.Vector) {
             context = context.attributes;
         }
     ...

   So, because 'fid' is not one of the attributes, the evaluation fails 
and no style is applied.

   In order to evaluate on the feature fid, you can use the 
OpenLayers.Filter.FeatureId instead and create your own rules.  If 
you're not familiar with filters, you can take a look at this example:
     http://openlayers.org/dev/examples/filter.html

   Once you get that filter working, you'll see your point turn green 
when selected.

   Lastly, when you use rules, you need to cover all possibilities for 
all features to render.  If you only specify one rule with "property 
equal something", all features that evaluates the rule correctly will 
render, but not the others.  A quick way to make sure the other at least 
render, you can specify an elseFilter :

     styleMap.styles["select"].addRules([new OpenLayers.Rule({
         symbolizer: {strokeColor:"black",strokeWidth: 10},
         elseFilter: true
     })]);

   Try that and see how it goes.

HTH,

Alexandre


On 12-08-09 12:46 PM, Christian Benke wrote:
> Hello!
>
> I'm having difficulties to understand how addUniqueValueRules is applied.
>
> http://poab.org/openlayers/stylerule.html fetches data from a 
> GeoJSON-file and draws a point and a line according to the styling in 
> styleMap.
>
> My goal is to have the Point and the Line drawn in different colors. 
> To achieve this goal i try to add a "Unique Value Rule" with the 
> property set to "fid" and a symbolizer matching the value "999", which 
> should draw the strokeColor of the point as green when selected.
>
> However, the Point simply disappears when selected.
>
> I've been banging my head against this problem for hours, i just don't 
> see why the rule doesn't seem to match any attribute i try to feed it, 
> while the attribute exists in the vector-object i'm matching it against.
> I also don't understand why the feature i'm selecting actually 
> disappears - if the rule does not match, the selected feature should 
> actually not be changed?!
>
> How can i debug the addUniqueValueRules-function?
>
> I'm not asking to solve the issue for me, but if anyone could take a 
> look at my example and help me understand where i'm misunderstanding 
> the concept, it would help me sleep better tonight :-)
>
> Best regards,
> Christian
>
>
> _______________________________________________
> Users mailing list
> Users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/openlayers-users


-- 
Alexandre Dubé
Mapgears
www.mapgears.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/openlayers-users/attachments/20120809/b8e2a410/attachment.html>


More information about the Users mailing list