It looks like the generated SQL is correct. (Running it in the database
console returns the same results for the given bbox, and the integer is
converted to a float in the query), however in the first style it logs "
Style cache hit ratio: 0.8 , hits 4, requests 5", but in the second style
it logs "Style cache hit ratio: NaN , hits 0, requests 0". The other
possible issue I see in this part of the log is that the first style
includes "exporting SQL ComparisonFilter", but the second does not.

There are also a number of errors that pop up when I save the styles, but
they seem to be the same in both cases. (Multiple occurences of "
15 031 17:31:44 DEBUG  [data.util] - CRSConverterFactory can be applied
from Strings to CRS  only.
15 031 17:31:44 DEBUG  [data.util] - InterpolationConverterFactory can be
applied from Strings to Interpolation  only.
15 031 17:31:44 TRACE  [geotools.util] - Error applying the converter class
org.geotools.data.util.GeometryConverterFactory$1 on
(LayerInfoImpl-7150e784:183333ce619:-eeb,class
org.locationtech.jts.geom.Geometry)
org.locationtech.jts.io.ParseException: Unknown geometry type:
LayerInfoImpl-7150e784
...
")

Here is the relevant part of the log for the first style (working), and the
second style (not working):

15 031 17:31:10 INFO   [geoserver.wms] -
Request: getServiceInfo
15 031 17:31:10 DEBUG  [data.util] - CRSConverterFactory can be applied
from Strings to CRS  only.
15 031 17:31:10 DEBUG  [data.util] - InterpolationConverterFactory can be
applied from Strings to Interpolation  only.
15 031 17:31:10 DEBUG  [data.util] - CRSConverterFactory can be applied
from Strings to CRS  only.
15 031 17:31:10 DEBUG  [data.util] - InterpolationConverterFactory can be
applied from Strings to Interpolation  only.
15 031 17:31:10 TRACE  [geotools.filter] - a comparision filter
PropertyIsEqualTo
15 031 17:31:10 TRACE  [geotools.filter] - type is 14
15 031 17:31:10 TRACE  [geotools.filter] - processing root PropertyName
15 031 17:31:10 TRACE  [geotools.filter] - processing root Literal
15 031 17:31:10 TRACE  [geotools.filter] - processing literal [ogc:Literal:
null]
15 031 17:31:10 TRACE  [geotools.filter] - processing 2
15 031 17:31:10 INFO   [geoserver.flow] - Request [WMS 1.3.0 GetMap]
starting, processing through flow controllers
15 031 17:31:10 INFO   [geoserver.flow] - Request control-flow performed,
running requests: 1, blocked requests: 0
15 031 17:31:10 DEBUG  [renderer.lite] - Computed scale denominator:
1066.3647919240505
15 031 17:31:10 DEBUG  [renderer.lite] - creating rules for scale
denominator - 1,066.365
15 031 17:31:10 DEBUG  [data.util] - CRSConverterFactory can be applied
from Strings to CRS  only.
15 031 17:31:10 DEBUG  [data.util] - InterpolationConverterFactory can be
applied from Strings to Interpolation only.
15 031 17:31:10 DEBUG  [renderer.lite] - Processing 1 stylers for
http://www.unitedlocating.net/utilities/onegas:dist_mains
15 031 17:31:10 DEBUG  [renderer.lite] - Expanding rendering area by 2
pixels to consider stroke width
15 031 17:31:10 DEBUG  [renderer.lite] - Querying layer
http://www.unitedlocating.net/utilities/onegas:dist_mains with bbox:
ReferencedEnvelope[-1.0857498279932143E7 : -1.0857420648575293E7,
4216495.194130895 : 4216572.825487747]
15 031 17:31:10 DEBUG  [geotools.jdbc] - CREATE CONNECTION
15 031 17:31:10 TRACE  [data.jdbc] - exporting LogicFilter
15 031 17:31:10 TRACE  [data.jdbc] - exporting PropertyName
15 031 17:31:10 TRACE  [data.jdbc] - exporting LiteralExpression
15 031 17:31:10 DEBUG  [data.util] - CRSConverterFactory can be applied
from Strings to CRS  only.
15 031 17:31:10 DEBUG  [data.util] - InterpolationConverterFactory can be
applied from Strings to Interpolation only.
15 031 17:31:10 TRACE  [data.jdbc] - exporting SQL ComparisonFilter
15 031 17:31:10 TRACE  [data.jdbc] - exporting PropertyName
15 031 17:31:10 TRACE  [data.jdbc] - exporting LiteralExpression
15 031 17:31:10 TRACE  [data.jdbc] - exporting PropertyName
15 031 17:31:10 DEBUG  [geotools.jdbc] - SELECT
"objectid","diameter",encode(ST_AsTWKB(ST_Simplify(ST_Force2D("shape"),
1.7493604843821232E-6, true),6), 'base64') as "shape" FROM
"public"."dist_mains" WHERE ("shape" && ST_GeomFromText('POLYGON
((-97.53456652164458 35.3862466456832, -97.53456652164458
35.38681518984578, -97.53386914730073 35.38681518984578, -97.53386914730073
35.3862466456832, -97.53456652164458 35.3862466456832))', 4326) AND
"diameter" = 2.0 AND "diameter" IS NOT NULL )
15 031 17:31:10 DEBUG  [geotools.jdbc] - CLOSE CONNECTION
15 031 17:31:10 DEBUG  [renderer.label] - TOTAL LINE LABELS : 0
15 031 17:31:10 DEBUG  [renderer.label] - PAINTED LINE LABELS : 0
15 031 17:31:10 DEBUG  [renderer.label] - REMAINING LINE LABELS : 0
15 031 17:31:10 DEBUG  [renderer.lite] - Style cache hit ratio: 0.8 , hits
4, requests 5
15 031 17:31:10 INFO   [geoserver.wms] -
Request: getMap
...

Second style (not working):

15 032 17:32:12 INFO   [geoserver.wms] -
Request: getServiceInfo
15 032 17:32:12 DEBUG  [data.util] - CRSConverterFactory can be applied
from Strings to CRS  only.
15 032 17:32:12 DEBUG  [data.util] - InterpolationConverterFactory can be
applied from Strings to Interpolation  only.
15 032 17:32:12 DEBUG  [data.util] - CRSConverterFactory can be applied
from Strings to CRS  only.
15 032 17:32:12 DEBUG  [data.util] - InterpolationConverterFactory can be
applied from Strings to Interpolation  only.
15 032 17:32:12 TRACE  [geotools.filter] - a comparision filter
PropertyIsEqualTo
15 032 17:32:12 TRACE  [geotools.filter] - type is 14
15 032 17:32:12 TRACE  [geotools.filter] - processing root PropertyName
15 032 17:32:12 TRACE  [geotools.filter] - processing root Literal
15 032 17:32:12 TRACE  [geotools.filter] - processing literal [ogc:Literal:
null]
15 032 17:32:12 TRACE  [geotools.filter] - processing 2.5
15 032 17:32:12 TRACE  [geotools.filter] - a comparision filter
PropertyIsEqualTo
15 032 17:32:12 TRACE  [geotools.filter] - type is 14
15 032 17:32:12 TRACE  [geotools.filter] - processing root PropertyName
15 032 17:32:12 TRACE  [geotools.filter] - processing root Literal
15 032 17:32:12 TRACE  [geotools.filter] - processing literal [ogc:Literal:
null]
15 032 17:32:12 TRACE  [geotools.filter] - processing 2
15 032 17:32:12 INFO   [geoserver.flow] - Request [WMS 1.3.0 GetMap]
starting, processing through flow controllers
15 032 17:32:12 INFO   [geoserver.flow] - Request control-flow performed,
running requests: 1, blocked requests: 0
15 032 17:32:12 DEBUG  [renderer.lite] - Computed scale denominator:
1066.3647919240505
15 032 17:32:12 DEBUG  [renderer.lite] - creating rules for scale
denominator - 1,066.365
15 032 17:32:12 DEBUG  [data.util] - CRSConverterFactory can be applied
from Strings to CRS  only.
15 032 17:32:12 DEBUG  [data.util] - InterpolationConverterFactory can be
applied from Strings to Interpolation only.
15 032 17:32:12 DEBUG  [renderer.lite] - Processing 1 stylers for
http://www.unitedlocating.net/utilities/onegas:dist_mains
15 032 17:32:12 DEBUG  [renderer.lite] - Expanding rendering area by 2
pixels to consider stroke width
15 032 17:32:12 DEBUG  [renderer.lite] - Querying layer
http://www.unitedlocating.net/utilities/onegas:dist_mains with bbox:
ReferencedEnvelope[-1.0857498279932143E7 : -1.0857420648575293E7,
4216495.194130895 : 4216572.825487747]
15 032 17:32:12 DEBUG  [geotools.jdbc] - CREATE CONNECTION
15 032 17:32:12 TRACE  [data.jdbc] - exporting LogicFilter
15 032 17:32:12 TRACE  [data.jdbc] - exporting PropertyName
15 032 17:32:12 TRACE  [data.jdbc] - exporting LiteralExpression
15 032 17:32:12 DEBUG  [data.util] - CRSConverterFactory can be applied
from Strings to CRS  only.
15 032 17:32:12 DEBUG  [data.util] - InterpolationConverterFactory can be
applied from Strings to Interpolation only.
15 032 17:32:12 TRACE  [data.jdbc] - exporting PropertyName
15 032 17:32:12 TRACE  [data.jdbc] - exporting LiteralExpression
15 032 17:32:12 TRACE  [data.jdbc] - exporting LiteralExpression
15 032 17:32:12 TRACE  [data.jdbc] - exporting PropertyName
15 032 17:32:12 DEBUG  [geotools.jdbc] - SELECT
"objectid","diameter",encode(ST_AsTWKB(ST_Simplify(ST_Force2D("shape"),
1.7493604843821232E-6, true),6), 'base64') as "shape" FROM
"public"."dist_mains" WHERE ("shape" && ST_GeomFromText('POLYGON
((-97.53456652164458 35.3862466456832, -97.53456652164458
35.38681518984578, -97.53386914730073 35.38681518984578, -97.53386914730073
35.3862466456832, -97.53456652164458 35.3862466456832))', 4326) AND
"diameter" IN (2.5, 2.0) AND "diameter" IS NOT NULL )
15 032 17:32:12 DEBUG  [geotools.jdbc] - CLOSE CONNECTION
15 032 17:32:12 DEBUG  [renderer.label] - TOTAL LINE LABELS : 0
15 032 17:32:12 DEBUG  [renderer.label] - PAINTED LINE LABELS : 0
15 032 17:32:12 DEBUG  [renderer.label] - REMAINING LINE LABELS : 0
15 032 17:32:12 DEBUG  [renderer.lite] - Style cache hit ratio: NaN , hits
0, requests 0
15 032 17:32:12 INFO   [geoserver.wms] -
Request: getMap
...

On Thu, Sep 15, 2022 at 1:48 AM Andrea Aime <
andrea.a...@geosolutionsgroup.com> wrote:

> Hi Jonathan,
> the situation is indeed strange... I'm not sure if that filter fails to
> evaluate at the SQL level or in memory.
> Memory wise the code doing the PropertyIsEqualTo should be the same in the
> two cases... Try to set the logging level to "GEOTOOLS_DEVELOPER_LOGGING"
> and check both the generated SQL (which might on might not contain that
> filter, based on how complex your style is) and if there is any interesting
> log
> regarding the evaluation of the filters in memory.
>
> Cheers
> Andrea
>
> On Wed, Sep 14, 2022 at 9:24 PM Jonathan D <jonathanr...@gmail.com> wrote:
>
>> I have had an issue with trying to use integer values in SLD filter
>> logical expressions (tested with "Or" expressions) for fields that are
>> floating point numbers in the database.
>>
>> For example, the following DOES match features that have a float type
>> "diameter" column with value "2.0" in PostgreSQL
>>
>> <ogc:Filter>
>>   <ogc:PropertyIsEqualTo>
>>     <ogc:PropertyName>diameter</ogc:PropertyName>
>>     <ogc:Literal>2</ogc:Literal>
>>   </ogc:PropertyIsEqualTo>
>> </ogc:Filter>
>>
>> However, the following does not match features with value "2.0":
>>
>> <ogc:Filter>
>>   <ogc:Or>
>>     <ogc:PropertyIsEqualTo>
>>       <ogc:PropertyName>diameter</ogc:PropertyName>
>>       <ogc:Literal>2.5</ogc:Literal>
>>     </ogc:PropertyIsEqualTo>
>>     <ogc:PropertyIsEqualTo>
>>       <ogc:PropertyName>diameter</ogc:PropertyName>
>>       <ogc:Literal>2</ogc:Literal>
>>     </ogc:PropertyIsEqualTo>
>>   </ogc:Or>
>> </ogc:Filter>
>>
>> I would expect Integers to be converted to floating point numbers in all
>> cases when the column is a float type, as in SQL where clauses. I am
>> converting lyrx styles into SLDs programmatically using GeoCat's
>> bridge-style, and the fieldValues in uniqueValueGroups that get converted
>> to filters are all given as string values, so I don't have a way to
>> determine the type of the values solely from the styling information.
>>
>> I just wanted to get thoughts before I submit a bug report.
>>
>> Thanks,
>> Jonathan
>>
>> _______________________________________________
>> Geoserver-users mailing list
>>
>> Please make sure you read the following two resources before posting to
>> this list:
>> - Earning your support instead of buying it, but Ian Turton:
>> http://www.ianturton.com/talks/foss4g.html#/
>> - The GeoServer user list posting guidelines:
>> http://geoserver.org/comm/userlist-guidelines.html
>>
>> If you want to request a feature or an improvement, also see this:
>> https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer
>>
>>
>> Geoserver-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/geoserver-users
>>
>
>
> --
>
> Regards,
>
> Andrea Aime
>
> ==
> GeoServer Professional Services from the experts!
>
> Visit http://bit.ly/gs-services-us for more information.
> ==
>
> Ing. Andrea Aime
> @geowolf
> Technical Lead
>
> GeoSolutions Group
> phone: +39 0584 962313
>
> fax:     +39 0584 1660272
>
> mob:   +39  339 8844549
>
> https://www.geosolutionsgroup.com/
>
> http://twitter.com/geosolutions_it
>
> -------------------------------------------------------
>
> Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE
> 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si
> precisa che ogni circostanza inerente alla presente email (il suo
> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è
> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il
> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra
> operazione è illecita. Le sarei comunque grato se potesse darmene notizia.
>
> This email is intended only for the person or entity to which it is
> addressed and may contain information that is privileged, confidential or
> otherwise protected from disclosure. We remind that - as provided by
> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this
> e-mail or the information herein by anyone other than the intended
> recipient is prohibited. If you have received this email by mistake, please
> notify us immediately by telephone or e-mail
>
_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this 
list:
- Earning your support instead of buying it, but Ian Turton: 
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: 
http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: 
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to