[Geoserver-users] SLD problem with attribute filtering

Hello,

I have a SLD file styling 2 different shapefiles, one containing point and
the other containing polygons. The polygons have an attribute that the point
doesn't.

The problem is, that when I filter the Polygon in SLD on their attribute,
the point can't render because it doesn't have this attribute. Even if it
not under the same rule.

I hope I'm explaining well enough.

Please see the SLD and shapefiles attached as example.

Assign the SLD file to style the shapefiles, and see that the Area shapefile
is rendered correctly, but the Point shapefile can't render. If you remove
the filter for the attribute in the Polygon rule, then the point can render.

Thank you

test.zip <http://osgeo-org.1560.x6.nabble.com/file/n5252667/test.zip&gt;

--
View this message in context: http://osgeo-org.1560.x6.nabble.com/SLD-problem-with-attribute-filtering-tp5252667.html
Sent from the GeoServer - User mailing list archive at Nabble.com.

Why not create two different SLDs?

···

On Wed, Feb 24, 2016 at 3:41 PM, Geoffrey <balmeg@anonymised.com> wrote:

Hello,

I have a SLD file styling 2 different shapefiles, one containing point and
the other containing polygons. The polygons have an attribute that the point
doesn’t.

The problem is, that when I filter the Polygon in SLD on their attribute,
the point can’t render because it doesn’t have this attribute. Even if it
not under the same rule.

I hope I’m explaining well enough.

Please see the SLD and shapefiles attached as example.

Assign the SLD file to style the shapefiles, and see that the Area shapefile
is rendered correctly, but the Point shapefile can’t render. If you remove
the filter for the attribute in the Polygon rule, then the point can render.

Thank you

​I need to have everything in 1 SLD., it’s a part of the requirements of the work I have to do.

Isn’t this behavior a bug of geoserver ? It shouldn’t behave this way when you don’t have the exact same attribute for your point and your polygon.

···

2016-02-25 2:06 GMT+01:00 Martin Davis <mtnclimb@anonymised.com>:

Why not create two different SLDs?

On Wed, Feb 24, 2016 at 3:41 PM, Geoffrey <balmeg@anonymised.com> wrote:

Hello,

I have a SLD file styling 2 different shapefiles, one containing point and
the other containing polygons. The polygons have an attribute that the point
doesn’t.

The problem is, that when I filter the Polygon in SLD on their attribute,
the point can’t render because it doesn’t have this attribute. Even if it
not under the same rule.

I hope I’m explaining well enough.

Please see the SLD and shapefiles attached as example.

Assign the SLD file to style the shapefiles, and see that the Area shapefile
is rendered correctly, but the Point shapefile can’t render. If you remove
the filter for the attribute in the Polygon rule, then the point can render.

Thank you

Just a guess, but this is probably caused by a pre-scan that GeoServer does to validate that all the attributes referred to in the SLD are available in the underlying layer. (One reason for this I think is that GeoServer only requests the attributes needed to compute the SLD filters).

I’m not sure this can be called a bug, it’s more of a design limitation. And as such you may have to adjust your requirements to match the tool you are using…

···

On Wed, Feb 24, 2016 at 5:10 PM, Geoffrey Balme <balmeg@anonymised.com> wrote:

​I need to have everything in 1 SLD., it’s a part of the requirements of the work I have to do.

Isn’t this behavior a bug of geoserver ? It shouldn’t behave this way when you don’t have the exact same attribute for your point and your polygon.

2016-02-25 2:06 GMT+01:00 Martin Davis <mtnclimb@anonymised.com>:

Why not create two different SLDs?

On Wed, Feb 24, 2016 at 3:41 PM, Geoffrey <balmeg@anonymised.com.> wrote:

Hello,

I have a SLD file styling 2 different shapefiles, one containing point and
the other containing polygons. The polygons have an attribute that the point
doesn’t.

The problem is, that when I filter the Polygon in SLD on their attribute,
the point can’t render because it doesn’t have this attribute. Even if it
not under the same rule.

I hope I’m explaining well enough.

Please see the SLD and shapefiles attached as example.

Assign the SLD file to style the shapefiles, and see that the Area shapefile
is rendered correctly, but the Point shapefile can’t render. If you remove
the filter for the attribute in the Polygon rule, then the point can render.

Thank you

I agree with Martin, separate styles would be better and much more maintainable.

However, if you really need to have you tried filtering by geometry type on the rule, e.g.

ogc:PropertyIsEqualTo

ogc:PropertyNamegtype</ogc:PropertyName>

ogc:LiteralPoint</ogc:Literal>

</ogc:PropertyIsEqualTo>

Or maybe basing the layers on views which make the layers look the same at an attribute level (i.e. add columns with null/default values for missing attributes).

···

Just a guess, but this is probably caused by a pre-scan that GeoServer does to validate that all the attributes referred to in the SLD are available in the underlying layer. (One reason for this I think is that GeoServer only requests the attributes needed to compute the SLD filters).

I’m not sure this can be called a bug, it’s more of a design limitation. And as such you may have to adjust your requirements to match the tool you are using…

On Wed, Feb 24, 2016 at 5:10 PM, Geoffrey Balme <balmeg@…84…> wrote:

​I need to have everything in 1 SLD., it’s a part of the requirements of the work I have to do.

Isn’t this behavior a bug of geoserver ? It shouldn’t behave this way when you don’t have the exact same attribute for your point and your polygon.

2016-02-25 2:06 GMT+01:00 Martin Davis <mtnclimb@…84…>:

Why not create two different SLDs?

On Wed, Feb 24, 2016 at 3:41 PM, Geoffrey <balmeg@…84…> wrote:

Hello,

I have a SLD file styling 2 different shapefiles, one containing point and
the other containing polygons. The polygons have an attribute that the point
doesn’t.

The problem is, that when I filter the Polygon in SLD on their attribute,
the point can’t render because it doesn’t have this attribute. Even if it
not under the same rule.

I hope I’m explaining well enough.

Please see the SLD and shapefiles attached as example.

Assign the SLD file to style the shapefiles, and see that the Area shapefile
is rendered correctly, but the Point shapefile can’t render. If you remove
the filter for the attribute in the Polygon rule, then the point can render.

Thank you

On Thu, Feb 25, 2016 at 2:17 AM, Martin Davis <mtnclimb@anonymised.com> wrote:

Just a guess, but this is probably caused by a pre-scan that GeoServer
does to validate that all the attributes referred to in the SLD are
available in the underlying layer. (One reason for this I think is that
GeoServer only requests the attributes needed to compute the SLD filters).

We actually do that because back at the time, we had a lot of complaints by
users that styles were not working
and upon inspection, they contained typos in the attribute names. That
wasted a lot of time on the list.

I'm not sure this can be called a bug, it's more of a design limitation.
And as such you may have to adjust your requirements to match the tool you
are using...

It's a design decision. If someone wants to do the work, I would not be
opposed to make the attribute check controlled
by a flag (system variable of sorts), so that it can be disabled

Cheers
Andrea

--

GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.

-------------------------------------------------------

I’ve been looking into this this week for my own work.
I note in the OGC Filters specification 2.0 (http://docs.opengeospatial.org/is/09-026r2/09-026r2.html) the following definition for the PropertyIsNull operator:
“The PropertyIsNull operator tests the specified property to see if it exists in the resource being evaluated. This corresponds to checking whether the property exists in the real-world”

This is in contrast to the OGC Filters 1.0 spec which for the same filter says:
“The element encodes an operator that checks to see if the value of its content is NULL. A NULL is equivalent to no value present. The value 0 is a valid value and is not considered NULL.”

So I guess if GeoServer switches to Filters 2.0, you’ll be able to use the PropertyIsNull operator in conjuncton with AND/OR/NOT to build an expression. I just tried to do this with a 2.7.x install of Geoserver, but get the obligatory XML error returned: “The requested Style can not be used with this layer”

(the 2.0 spec also includes a section demonstrating how to create a “PropertyExists” filter; so someone clearly wanted this sort of functionality added to the spec).

Cheers,
Jonathan

---- On Thu, 25 Feb 2016 07:18:27 +0000 Andrea Aime andrea.aime@anonymised.com wrote ----

On Thu, Feb 25, 2016 at 2:17 AM, Martin Davis <mtnclimb@anonymised.com> wrote:

Just a guess, but this is probably caused by a pre-scan that GeoServer does to validate that all the attributes referred to in the SLD are available in the underlying layer. (One reason for this I think is that GeoServer only requests the attributes needed to compute the SLD filters).

We actually do that because back at the time, we had a lot of complaints by users that styles were not working
and upon inspection, they contained typos in the attribute names. That wasted a lot of time on the list.

I’m not sure this can be called a bug, it’s more of a design limitation. And as such you may have to adjust your requirements to match the tool you are using…

It’s a design decision. If someone wants to do the work, I would not be opposed to make the attribute check controlled
by a flag (system variable of sorts), so that it can be disabled

Cheers
Andrea

==
GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime

@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313

fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy’s New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc.



Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140_______________________________________________
Geoserver-users mailing list
Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

On Mon, Feb 29, 2016 at 4:24 PM, Jonathan Moules <
jonathan-lists@anonymised.com> wrote:

So I guess if GeoServer switches to Filters 2.0, you'll be able to use the
PropertyIsNull operator in conjuncton with AND/OR/NOT to build an
expression. I just tried to do this with a 2.7.x install of Geoserver, but
get the obligatory XML error returned: "The requested Style can not be used
with this layer"

(the 2.0 spec also includes a section demonstrating how to create a
"PropertyExists" filter; so someone clearly wanted this sort of
functionality added to the spec).

GeoServer has nothing to switch to, we'd need a SLD 2.0 that uses Filter
2.0, but it's not out there afaik :slight_smile:

That said, we have a PropertyExists filter function, but the code that's
checking for property existence does not know what
that function does, so it won't make any difference.

Cheers
Andrea

--

GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.

-------------------------------------------------------