Hi Jody,
Upon a little further investigation I don't think I need to do anything
with the casting functions. I think all that needs to be done is to add
a check so that no casting is done if both objects are Numbers.
So for my case if I add
if (v1 instanceof Number && v2 instanceof Number)
return new Object[] { v1, v2 };
to the eval function of the BinaryComparisonAbstract function then
instead of converting between doubles and integers it just compares the
two numbers and the issues I have are resolved.
I think this should be okay for other cases Number cases as well. I
looked at the CompareFilterImpl and it doesn't differentiate between
Integers and Doubles it treats all Numbers the same (converts them to
doubles and then runs the comparison).
But I guess this won't work well for String/Number cases.
What do you think? Can we add something like this or is it going to
cause other problems I haven't forseen?
Emily
Jody Garnett wrote:
> Hi Emily:
>
> The filter thing is not strongly typed (it does not really know they
> are integers).
>
> It should however be able to check that your DAMAGE attribute is of
> type interger and then it will compare try and convert the other
> strings into an interger to match.
>
> The same thing happens in reverse if your DAMAGE attribute was a String.
>
> To force the issue there are a couple of "casting" functions you could
> wrap around to force the value to be an int or a double or whatever.
>
> For a while the handling of literal was very slow and tried to parse
> every string as a double; then an interger before giving up and
> returning a string. Slow and painful.
>
> Can we think of another way? Perhaps detect any number as a request
> for numeric comparison and perform all checks using BigDecimal?
>
> Jody
>
> On Wed, Jun 10, 2009 at 9:44 AM, Emily Gouge<[email protected]> wrote:
>> I have shapefile with 5 features with an integer attribute - DAMAMGE).
>> Each of these features as a unique DAMAGE value between 1 and 5. In
>> uDig I'm creating a color-theming style that creates 5 rules that are
>> similar to the SLD below. These rules basically evaluate the statement
>> "1 <= DAMAGE < 1.8";
>>
>> When I view the results in uDig, the colors are incorrect as the
>> features are being put in the wrong categories. From my debugging it
>> looks like that when the filter is evaluating, the "1.8" is being
>> converted to the Integer "1" thus evaluating the expression "1 <= DAMAGE
>> < 1" which is always going to return false.
>>
>> This conversion from 1.8 to 1 is being done in the eval function of the
>> BinaryComparisonAbstract class. Here it converts the "1.8" double to an
>> integer.
>>
>> I'm wondering how/if this can be fixed? (or maybe it's designed to work
>> this way?)
>>
>> I was thinking of trying to add some logic to this function to be
>> smarter about the conversion done & try to not loose precision if
>> possible (for example convert from integer to double before we convert
>> from double to integer). I'm not sure if this is the best way to go
>> about this?
>>
>> Thanks,
>> Emily
>>
>>
>> <sld:Rule>
>> <sld:Name>rule01</sld:Name>
>> <sld:Title>1..1.8</sld:Title>
>> <ogc:Filter>
>> <ogc:And>
>> <ogc:PropertyIsGreaterThanOrEqualTo>
>> <ogc:PropertyName>Damage</ogc:PropertyName>
>> <ogc:Literal>1</ogc:Literal>
>> </ogc:PropertyIsGreaterThanOrEqualTo>
>> <ogc:PropertyIsLessThan>
>> <ogc:PropertyName>Damage</ogc:PropertyName>
>> <ogc:Literal>1.8</ogc:Literal>
>> </ogc:PropertyIsLessThan>
>> </ogc:And>
>> </ogc:Filter>
>> <sld:MaxScaleDenominator>1.7976931348623157E308</sld:MaxScaleDenominator>
>> <sld:PolygonSymbolizer>
>> <sld:Fill>
>> <sld:CssParameter name="fill">
>> <ogc:Literal>#EFF3FF</ogc:Literal>
>> </sld:CssParameter>
>> <sld:CssParameter name="fill-opacity">
>> <ogc:Literal>0.5</ogc:Literal>
>> </sld:CssParameter>
>> </sld:Fill>
>> <sld:Stroke>
>> <sld:CssParameter name="stroke">
>> <ogc:Literal>#000000</ogc:Literal>
>> </sld:CssParameter>
>> <sld:CssParameter name="stroke-linecap">
>> <ogc:Literal>butt</ogc:Literal>
>> </sld:CssParameter>
>> <sld:CssParameter name="stroke-linejoin">
>> <ogc:Literal>miter</ogc:Literal>
>> </sld:CssParameter>
>> <sld:CssParameter name="stroke-opacity">
>> <ogc:Literal>1</ogc:Literal>
>> </sld:CssParameter>
>> <sld:CssParameter name="stroke-width">
>> <ogc:Literal>1</ogc:Literal>
>> </sld:CssParameter>
>> <sld:CssParameter name="stroke-dashoffset">
>> <ogc:Literal>0</ogc:Literal>
>> </sld:CssParameter>
>> </sld:Stroke>
>> </sld:PolygonSymbolizer>
>> <sld:Rule>
>>
>> ------------------------------------------------------------------------------
>> Crystal Reports - New Free Runtime and 30 Day Trial
>> Check out the new simplified licensing option that enables unlimited
>> royalty-free distribution of the report engine for externally facing
>> server and web deployment.
>> http://p.sf.net/sfu/businessobjects
>> _______________________________________________
>> Geotools-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/geotools-devel
>>
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel