[Geoserver-users] strMatch problem

Hi there,

I have a problem with rendering my data with SLD through Geoserver. My data is in PostGis database and I need to use rexep to match the values in it. I have read few threads here and one of them dealt with the same problem. Unfortunately that thread didn’t give me an answer.

I wrote in SLD:

<ogc:Filter xmlns:ogc=“http://www.opengis.net/ogc”>

ogc:And

<ogc:Function name=“strMatches”>

ogc:PropertyNamekohdenimi</ogc:PropertyName>

ogc:Literal_viiteviiva</ogc:Literal>

</ogc:Function>

ogc:PropertyIsNotEqualTo

ogc:PropertyNamekohdenimi</ogc:PropertyName>

ogc:LiteralYJK_Sähkö_Helen_viiteviiva</ogc:Literal>

</ogc:PropertyIsNotEqualTo>

</ogc:And>

</ogc:Filter>

Can I use strMatches in PostGis database or does it work only for in Oracle example?

How can I solve my problem?

Best Regards

Mr Ville Jussila

Il 03/19/2015 03:52 PM, Ville Jussila scrisse:

I wrote in SLD:

<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc&quot;&gt;

<ogc:And>

<ogc:Function name="strMatches">

<ogc:PropertyName>kohdenimi</ogc:PropertyName>

<ogc:Literal>_viiteviiva</ogc:Literal>

</ogc:Function>

The right syntax should be:

...
        <ogc:PropertyIsEqualTo>
           <ogc:Function name="strMatches">
             <ogc:PropertyName>kohdenimi</ogc:PropertyName>
             <ogc:Literal>_viiteviiva</ogc:Literal>
           </ogc:Function>
           <ogc:Literal>true</ogc:Literal>
        </ogc:PropertyIsEqualTo>
...

Andrea dixit :slight_smile:

bye
   maxx

On Thu, Mar 19, 2015 at 3:52 PM, Ville Jussila <vijussila@anonymised.com> wrote:

Hi there,

I have a problem with rendering my data with SLD through Geoserver. My
data is in PostGis database and I need to use rexep to match the values in
it. I have read few threads here and one of them dealt with the same
problem. Unfortunately that thread didn’t give me an answer.

I wrote in SLD:

<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc&quot;&gt;

<ogc:And>

<ogc:Function name="strMatches">

<ogc:PropertyName>kohdenimi</ogc:PropertyName>

<ogc:Literal>_viiteviiva</ogc:Literal>

</ogc:Function>

<ogc:PropertyIsNotEqualTo>

<ogc:PropertyName>kohdenimi</ogc:PropertyName>

<ogc:Literal>YJK_Sähkö_Helen_viiteviiva</ogc:Literal>

</ogc:PropertyIsNotEqualTo>

</ogc:And>

</ogc:Filter>

Can I use strMatches in PostGis database or does it work only for in
Oracle example?

No, there is no way to use general regular expression against databases,
strMatches uses
the Java regex syntax, we'd need someone to do the work required to write
the
sql encoder for it, and to turn the java regex syntax in the database one.

That said... it seems to me you have a pretty simple match over there,
can't it be
made also using PropertyIsLike, which is translated to a LIKE filter in sql?

Cheers
Andrea

--

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

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
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.

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

And couldn’t you use the OGC PropertyIsLike function (http://docs.geoserver.org/stable/en/user/filter/filter_reference.html#propertyislike-operator) to achieve the same solution with out the over head of a second function call?

Ian

On Thu, Mar 19, 2015 at 3:11 PM emmexx <emmexx@anonymised.com749…> wrote:

Il 03/19/2015 03:52 PM, Ville Jussila scrisse:

I wrote in SLD:

<ogc:Filter xmlns:ogc=“http://www.opengis.net/ogc”>

ogc:And

<ogc:Function name=“strMatches”>

ogc:PropertyNamekohdenimi</ogc:PropertyName>

ogc:Literal_viiteviiva</ogc:Literal>

</ogc:Function>

The right syntax should be:


ogc:PropertyIsEqualTo
<ogc:Function name=“strMatches”>
ogc:PropertyNamekohdenimi</ogc:PropertyName>
ogc:Literal_viiteviiva</ogc:Literal>
</ogc:Function>
ogc:Literaltrue</ogc:Literal>
</ogc:PropertyIsEqualTo>

Andrea dixit :slight_smile:

bye
maxx


Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the
conversation now. http://goparallel.sourceforge.net/


Geoserver-users mailing list
Geoserver-users@anonymised.comsourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Hi,

It may help to avoid typos to use the PropertyIsLike filter that works with topp:states from this comment as a template:

http://jira.codehaus.org/browse/GEOS-6553?focusedCommentId=363026&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-363026

Notice also that matchCase is perhaps not supported. The default is anyway “true” meaning case sensitive match should work.

-Jukka Rahkonen-

Ian Turton wrote:

···

And couldn’t you use the OGC PropertyIsLike function (http://docs.geoserver.org/stable/en/user/filter/filter_reference.html#propertyislike-operator) to achieve the same solution with out the over head of a second function call?

Ian

On Thu, Mar 19, 2015 at 3:11 PM emmexx <emmexx@…6749…> wrote:

Il 03/19/2015 03:52 PM, Ville Jussila scrisse:

I wrote in SLD:

<ogc:Filter xmlns:ogc=“http://www.opengis.net/ogc”>

ogc:And

<ogc:Function name=“strMatches”>

ogc:PropertyNamekohdenimi</ogc:PropertyName>

ogc:Literal_viiteviiva</ogc:Literal>

</ogc:Function>

The right syntax should be:


ogc:PropertyIsEqualTo
<ogc:Function name=“strMatches”>
ogc:PropertyNamekohdenimi</ogc:PropertyName>
ogc:Literal_viiteviiva</ogc:Literal>
</ogc:Function>
ogc:Literaltrue</ogc:Literal>
</ogc:PropertyIsEqualTo>

Andrea dixit :slight_smile:

bye
maxx


Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the
conversation now. http://goparallel.sourceforge.net/


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

Il 03/19/2015 04:21 PM, Ian Turton scrisse:

And couldn't you use the OGC PropertyIsLike function
(http://docs.geoserver.org/stable/en/user/filter/filter_reference.html#propertyislike-operator)
  to achieve the same solution with out the over head of a second
function call?

I supposed that the given sample code was just a simplified example with "_viiteviiva" to be replaced by a real regex.

IMHO the problem with that code is not the right or wrong function used but the missing

<ogc:Literal>true</ogc:Literal>

bye
  maxx

Il 03/19/2015 04:16 PM, Andrea Aime scrisse:

No, there is no way to use general regular expression against databases,
strMatches uses
the Java regex syntax,

What do you mean?
I use strMatches in sld against a postgis database field, something like:

        <ogc:PropertyIsEqualTo>
           <ogc:Function name="strMatches">
             <ogc:PropertyName>mypostgisfield</ogc:PropertyName>
             <ogc:Literal>.*\b(1|32|56)\b.*</ogc:Literal>
           </ogc:Function>
           <ogc:Literal>true</ogc:Literal>
        </ogc:PropertyIsEqualTo>

Do you mean that postgresql regex has a different syntax that can't be used in strMatches?

Thank you
  maxx

On Thu, Mar 19, 2015 at 6:24 PM, emmexx <emmexx@anonymised.com> wrote:

Il 03/19/2015 04:16 PM, Andrea Aime scrisse:
> No, there is no way to use general regular expression against databases,
> strMatches uses
> the Java regex syntax,

What do you mean?
I use strMatches in sld against a postgis database field, something like:

        <ogc:PropertyIsEqualTo>
           <ogc:Function name="strMatches">
             <ogc:PropertyName>mypostgisfield</ogc:PropertyName>
             <ogc:Literal>.*\b(1|32|56)\b.*</ogc:Literal>
           </ogc:Function>
           <ogc:Literal>true</ogc:Literal>
        </ogc:PropertyIsEqualTo>

Do you mean that postgresql regex has a different syntax that can't be
used in strMatches?

It means that with the current setup strMatches is evaluated fully in
memory after loading
the data from the database, not encoded in sql (which would be more
efficient, but requires
some work, while most of the regex syntax between java and postgresql is
probably symilar, not all of it is)
Even just postgresql seems to have three different syntaxes for regular
expressions: http://www.regular-expressions.info/postgresql.html

Cheers
Andrea

--

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

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
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.

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

Hi to All,
Thanks a lot for your fast reply. Got lot of new information from Geoserver.

I built styles with regexp in QGIS and saved styles as a SLD-style. And tried to do it really simple without replacing anything at the SLD-file. It seems that I have to now find another way to determine my regexp. Obviously the PropertyIsLike function seems to be the best way to do it, as most of you recommended.

Any idea of the schedule when these regexp kind of functions will be used against database in Geoserver?

Cheers

Ville Jussila

···

2015-03-19 19:54 GMT+02:00 Andrea Aime <andrea.aime@anonymised.com>:


Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the
conversation now. http://goparallel.sourceforge.net/


Geoserver-users mailing list
Geoserver-users@anonymised.comsts.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

On Thu, Mar 19, 2015 at 6:24 PM, emmexx <emmexx@anonymised.com> wrote:

Il 03/19/2015 04:16 PM, Andrea Aime scrisse:

No, there is no way to use general regular expression against databases,
strMatches uses
the Java regex syntax,

What do you mean?
I use strMatches in sld against a postgis database field, something like:

ogc:PropertyIsEqualTo
<ogc:Function name=“strMatches”>
ogc:PropertyNamemypostgisfield</ogc:PropertyName>
ogc:Literal.\b(1|32|56)\b.</ogc:Literal>
</ogc:Function>
ogc:Literaltrue</ogc:Literal>
</ogc:PropertyIsEqualTo>

Do you mean that postgresql regex has a different syntax that can’t be
used in strMatches?

It means that with the current setup strMatches is evaluated fully in memory after loading
the data from the database, not encoded in sql (which would be more efficient, but requires
some work, while most of the regex syntax between java and postgresql is probably symilar, not all of it is)
Even just postgresql seems to have three different syntaxes for regular expressions: http://www.regular-expressions.info/postgresql.html

Cheers

Andrea

==

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

==

Ing. Andrea Aime

@geowolf
Technical Lead

GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
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.


On Mon, Mar 23, 2015 at 8:55 AM, Ville Jussila <vijussila@anonymised.com> wrote:

Hi to All,
Thanks a lot for your fast reply. Got lot of new information from
Geoserver.

I built styles with regexp in QGIS and saved styles as a SLD-style. And
tried to do it really simple without replacing anything at the SLD-file. It
seems that I have to now find another way to determine my regexp. Obviously
the PropertyIsLike function seems to be the best way to do it, as most of
you recommended.

Any idea of the schedule when these regexp kind of functions will be used
against database in Geoserver?

You mean, if it's going to be translated directly in sql anytime soon? The
function has been around for ... uh..
don't know exactly when, it was there 8 years ago when I going the
GeoServer development.

Translating filter functions in sql has never been a priority, I just did
some work a few years ago to show
that how it could have been done to a group of other devs that was
complaning about lack of
function translation support, whist stopped the complaints...
but did not result in them implementing the translation for the other
functions :wink:

I can point you to the code that does the translation, if you are
interested in trying to add support
for the strMatches function?
It can be done here:
https://github.com/geotools/geotools/blob/master/modules/plugin/jdbc/jdbc-postgis/src/main/java/org/geotools/data/postgis/FilterToSqlHelper.java#L468
As said, the tricky part is finding the differences in syntax between the
java one and the postgresql
one, and translating them.

Cheers
Andrea

--

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

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
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.

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