[Fwd: Re: [UMN_MAPSERVER-DEV] Re-thinking RFC 6]

Jan Hartmann j.l.h.hartmann at UVA.NL
Fri Jun 15 09:13:38 EDT 2007


Perhaps converting the start and end color to HSV (Hue, Saturation,
Value) would give values that could be interpolated in a meaningful way.
For display, the interpolated colors could be converted back to RGB. The
algorithm is elementary, i believe.

Jan

Daniel Morissette wrote:
> Interesting idea. I think I like it, but I'm not sure if I might not be 
> missing some possible drawbacks of it.
> 
> Back to RFC-6 itself, one problem I've always had with it is that doing 
> linear interoplation of RGB values between (r1, g1, b1) and (r2, g2, b2) 
> doesn't necessarily give a good looking color ramp. Others with more 
> experience dealing with colors than me could better comment, but I think 
> you'd almost need a color lookup table, or have the ability to specify 
> multiple r,g,b points that define a path in the RGB space instead of 
> just the start and end point.
> 
> Daniel
> 
> 
> Steve Lime wrote:
>> I agree on the naming. Will have to ponder that. I'd like an syntax 
>> that would accommodate colors and numbers in the same way:
>>
>>   PARAMETERLIMITS #FFFFFF #FF0000 or PARAMETERRANGE 1 10
>>
>> (we can handle that in mapfile.c) and then
>>   ITEMLIMITS 1000.0 50000.0
>>    or something like that.
>>
>> The machinery is very similar to that of RFC 19, you just use a 
>> msBindLayerToRange function that works just like msBindLayerToShape 
>> (same parameters even). Most of the plumbing is in maputil.c already, 
>> as is the original range code Bill Binko wrote.
>>
>> Steve
>>
>>>>> Frank Warmerdam <warmerdam at POBOX.COM> 06/14/07 11:18 PM >>>
>> Steve Lime wrote:
>>> Hi guys: As the deadline for RFC's approaches I wanted to float a 
>>> change to RFC 6 that might be doable by 5.0. I've not spent time 
>>> updating the RFC yet. The idea would be to bind properties to ranges 
>>> much like RFC 19. We'd extend the range concept to  colors, sizes and 
>>> angles. So COLORRANGE would become RANGE. RANGEs would live at the 
>>> layer level and would be referenced by name so you could have several.
>>>
>>> A range would be defined as:
>>>
>>> typedef struct {
>>>   char *name;
>>>   attributeBindingObj item; /* holds name and index */
>>>   colorObj mincolor, maxcolor; /* only colorObj's and numbers make 
>>> sense */
>>>   double minnumber, maxnumber;
>>>   double minvalue, maxvalue;
>>>   int intervals;
>>>   int method; /* should be enum - MS_RANGE_METHOD */
>>> } rangeObj;
>>>
>>> and a layer would have an array (fixed size, might be ok, should need 
>>> more than a couple, or dynamic) of these.
>>>
>>> Styles properties (color, outlinecolor, size, angle) could then 
>>> reference these by name.
>>>
>>> e.g.
>>>
>>> LAYER
>>>   NAME 'myLayer'
>>>   ...
>>>   RANGE
>>>     NAME 'sizeRange'
>>>     ITEM 'sizeitem'
>>>     MINNUMBER 1
>>>     MAXNUMBER 10
>>>     MINVALUE 1000.0
>>>     MAXVALUE 500000.0
>>>   END
>>
>> Steve,
>>
>> I sort of like this approach though it seems like substantial
>> machinery might be needed to support it.
>>
>> I also really think that you need to make it more clear what are
>> input values and what are output values. Perhaps min_in_val,
>> max_in_val, min_out_scalar, max_out_scalar.  For me "value" and
>> "number" are too general to work out which is input and output
>> of the function.
>>
>> Best regards,
> 
> 



More information about the mapserver-dev mailing list