[OpenLayers-Users] rules depending on state

Pierre GIRAUD bluecarto at gmail.com
Tue May 20 03:08:31 EDT 2008


Hi Tim,

The last Andreas' proposal was put into a patch I commit yesterday.
http://trac.openlayers.org/changeset/7216

Eric reviewed this but you can still have a look and scream if you don't agree.

Regards,
Pierre

On Mon, May 19, 2008 at 9:39 PM, Tim Schaub <tschaub at opengeo.org> wrote:
> Pierre GIRAUD wrote:
>> Yep,
>> I already tried that and this works great.
>> However, what if I want to set fillColor, strokeColor, fillOpacity and
>> strokeOpacity at the same time ? This is really painful.
>> And it seems like I need to provide a valid value for each possible
>> value of state. Default style won't be applied to features that aren't
>> in the switch cases.
>>
>> I would prefer something like :
>> var lookup = {
>>     'Insert': {
>>         fillColor: 'green',
>>         fillOpacity: 0.5
>>     },
>>     ...
>> };
>>
>
> Yes, you're right, you need a different function for each symbolizer
> property.  However, it shouldn't be too painful.
>
> function getValue(state, key) {
>     var value = lookup[state][key];
>     if(value == undefined) {
>         value = defaultSymbolizer[key];
>     }
>     return value;
> }
> var context = {
>     getFillColor: function(feature) {
>         return getValue(feature.state, "fillColor");
>     },
>     ...
> };
>
> Wouldn't be too hard to allow the symbolizer to be a function.  This
> function would be called for each feature and would return a symbolizer.
>  In fact, this seems more intuitive than the style context stuff.
>
> The style stuff can be made less twisted in OL3.
>
> Tim
>
>
>> Regards,
>> Pierre
>>
>>
>> On Tue, May 13, 2008 at 4:35 PM, Andreas Hocevar
>> <andreas.hocevar at gmail.com> wrote:
>>> Hey Pierre,
>>>
>>>  without having tried, something like the following should work:
>>>
>>>  var context = {
>>>    getStateColor: function(feature) {
>>>        switch(feature.state) {
>>>            case "Insert": return "green";
>>>            case "Update": return "yellow";
>>>            case "Delete": retrun "red";
>>>        }
>>>    }
>>>  }
>>>
>>>  var styleMap = new OpenLayers.StyleMap(new OpenLayers.Style({
>>>    strokeColor: "${getStateColor}"
>>>  }, {context: context}));
>>>
>>>  Regards,
>>>  Andreas.
>>>
>>>
>>>  Pierre GIRAUD wrote:
>>>
>>>>
>>>>
>>>> Hello OpenLayers styleMap gurus,
>>>>
>>>> I would like to have different symbolizers for the features depending
>>>> on their state property.
>>>> The addUniqueValueRules would look perfect for that but the context of
>>>> the generated rules is feature.attributes. The state will not be
>>>> evaluated because it's not one of those attributes.
>>>>
>>>> Has anyone a workaround to advice ?
>>>>
>>>> Regards,
>>>>
>>>> Pierre
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at openlayers.org
>>>> http://openlayers.org/mailman/listinfo/users
>>>>
>>>>
>>>
>> _______________________________________________
>> Users mailing list
>> Users at openlayers.org
>> http://openlayers.org/mailman/listinfo/users
>>
>> !DSPAM:4033,4829ade5124501137850744!
>>
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>



More information about the Users mailing list