Andreas, Eric, Cédric,

  Thanks to all of you for your support.  Your answers are very clear 
and well detailed.  I'll make the changes according to what you proposed 
and come back if I have any more questions.

  Thanks again,

Alexandre


Andreas Hocevar wrote:
> Hi,
>
> Alexandre Dube wrote:
>>   I want to be able to save a OpenLayers.Style object or hash to a 
>> vector feature.  Currently, in code, feature.style exists but you 
>> must define a hash or else it doesn't work.
>>   
>
> That's correct and expected. Let's call your hash "symbolizer".
>
>>   My problem is that I want to be able to draw features to be used as 
>> labels (floating text on the map).  To be able to do so, I need to 
>> define a StyleMap with a context to display the label (I manually set 
>> feature.isLabel on "featureadded") [1]
>>   
>
> You can evaluate the symbolizer from the context before setting 
> feature.style:
>
> feature.style = myStyleMap.styles["default"].createSymbolizer(feature);
>
>>   That works well, but as soon as I want to "bind / save" the style 
>> to the feature, I mean set feature.style, I need to set a hash and 
>> the feature will be rendered without the contexts.
>>   
>
> The above snippet creates a symbolizer from the default style of the 
> style map, and evaluates everything from the context.
>
>>   I don't fully understand how the contexts, symbolizers, etc. work, 
>> but my first guess would be to support OpenLayers.Style object 
>> directly in the feature object.  Does that make sense ?
>>   
>
> No. Context-based styling and symbolizers-per-feature are two 
> different things.
>
>>   Or maybe I'm doing it wrong and their's an other way of "labeling" 
>> features.  My goal is to create features on a "cosmetic" layer with a 
>> default style, then to be able to change the style of the features 
>> and bind it to them (I mean without using rules on the layer level, 
>> but by defining directly the feature style)
>>   
>
> That makes sense, and the snippet above is the solution. You start 
> with a layer with a StyleMap, and to override the evaluated style for 
> a specific feature, you set feature.style with the symbolizer you get 
> from Style::createSymbolizer.
>
> Note that if you want to change the label for such a feature later, 
> you need to set symbolizer.label, not feature.attributes.name.
>
> Also note that if you want a point feature with just a label and 
> without the geometry rendered, it is better to set the graphic: false 
> symbolizer property instead of pointRadius: 0.
>
> Regards,
> Andreas.
>
>> Many many thanks,
>>
>> Alexandre
>>
>>
>> // [1] START
>>             var labelStyle = {
>>                 label: "${name}",
>>                 labelSelect: true,
>>                 pointRadius: "${radius}"
>>             };
>>             var styleOptions = {
>>               context: {
>>                   'name': function(feature) {
>>                       var szValue;
>>                       if (feature.attributes['name'] && 
>> feature.isLabel === true) {
>>                           szValue = feature.attributes['name'];
>>                       } else {
>>                           szValue = "";
>>                       }
>>                       return szValue;
>>                   },
>>                   'radius': function(feature) {
>>                       return (feature.isLabel === true) ? 0 : 6;
>>                   }
>>               }
>>             };
>>
>>             var style = new OpenLayers.Style(
>>                 OpenLayers.Util.applyDefaults(
>>                     
>> labelStyle,OpenLayers.Feature.Vector.style["default"]),
>>                 styleOptions
>>             );
>>
>>             var styleMap = new OpenLayers.StyleMap({
>>                 "default": style
>>             });
>>                   layer = new OpenLayers.Layer.Vector(
>>                 "Cosmetic", {'styleMap': styleMap});
>>
>> // [1] END
>>
>>   
>
>


-- 
Alexandre Dubé
Mapgears
www.mapgears.com

_______________________________________________
Dev mailing list
Dev@openlayers.org
http://openlayers.org/mailman/listinfo/dev

Reply via email to