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