[mapserver-users] some questions regarding getFeatureInfo, SLD, PostGIS
Rahkonen Jukka
Jukka.Rahkonen at mmmtike.fi
Fri Sep 21 04:30:37 PDT 2012
And perhaps, if you would like to do something very tricky, you could create a function or stored procedure into your database and call that from DATA with the dynamic variables? The compute_style thing in this thread suggests that it might work http://www.mail-archive.com/mapserver-users@lists.osgeo.org/msg08537.html
-Jukka Rahkonen-
Smith, Michael wrote:
> At the SQL level, you can do some fancy work with CASE and setting some
> default values
>
> The CASE function allows you to set all kind of logical comparisons. You can do
> conditional joins that way, setting the join condition to a non matching value
> when you don't want the join, etc. SQL is more powerful than any template
> language.
>
> Mike
>
>
>
> On 9/21/12 7:07 AM, "Julien Cigar" <jcigar at ulb.ac.be> wrote:
>
> >On 09/21/2012 12:50, Rahkonen Jukka wrote:
> >> Hi,
> >
> >Hello,
> >
> >> So you have tried to define variables %SEX% and %BOD_ID%, used them
> >>inside your DATA and then fired WMS GetMaps by
> >>adding&SEX=your_value&BOD_ID=your_id? Does in not work or why it is
> >>not powerful enough?
> >
> >It is not powerful enough because it doesn't allow you to make simple
> >logical tests (if defined/equals/...), the run-time substitution is a
> >simple "replace %FOO%" by the value of FOO= from the query string.
> >
> >It doesn't allow you to do something like: "if FOO is defined or equal
> >to xxx, then add "JOIN foo f ON f.id = bar.foo_id", select additional
> >columns, and add a "WHERE foo.id = ..." at a certain place in the DATA
> >string".
> >
> >I guess mapscript should be used in this case, but it would be really
> >interesting to have this simple template language (or another solution)
> >without having to involve mapscript.
> >
> >Julien
> >
> >> -Jukka Rahkonen-
> >>
> >>
> >> Julien Cigar wrote:
> >>
> >>> Hello,
> >>>
> >>> I'm using Mapserver 6.0.1 with the following PostGIS layer:
> >>> http://pastie.org/private/84042k84vmljbontls5xvq
> >>>
> >>> The user has the possibility to select quite a lot of filters, which
> >>>implies that the SQL query should, in theory ,be generated
> >>>dynamically.
> >>> As this is not possible with Mapserver (run-time substitution with
> >>>HTTP parameters and VALIDATION ... END isn't powerful enough is my
> >>>case), I'm dynamically generating an SLD
> >>> (http://pastie.org/private/p66ml3uvqwcnphuuvera) to filter items and
> >>>it works very well.
> >>>
> >>> Some questions:
> >>>
> >>> - Why does Mapserver doesn't have a very lightweight template
> >>>language (or something similar) to dynamically build a string
> >>>following given parameters? It could be really useful to avoid
> >>>unnecessary JOIN, etc.
> >>> For example something like:
> >>> http://pastie.org/private/bojm3pi1dwrv18m2tvq (this is just an
> >>>example, but the idea is there)
> >>>
> >>> - I noticed in the PostgreSQL logs that sometimes Mapserver adds an
> >>>additional condition to the WHERE clause when SLD is used. For
> >>>example with the following<ogc:Filter> in my SLD:
> >>> #########################################
> >>> <ogc:Filter>
> >>> <ogc:PropertyIsEqualTo>
> >>> <ogc:PropertyName>basis_of_record_id</ogc:PropertyName>
> >>> <ogc:Literal>1</ogc:Literal>
> >>> </ogc:PropertyIsEqualTo>
> >>> </ogc:Filter>
> >>> #########################################
> >>>
> >>> Mapserver adds an additional "and (( ("basis_of_record_id"= 1) ))":
> >>>
> >>> (...) AS q where geom&& GeomFromText('POLYGON((-3.6860351557368
> >>> -9.81732918571448,-3.6860351557368
> 9.81732918571447,47.6860351496117
> >>> 9.81732918571447,47.6860351496117 -9.81732918571448,-
> 3.6860351557368
> >>> -9.81732918571448))',4326) and (( ("basis_of_record_id"= 1) ))
> >>>
> >>> which is not bad as less rows have to be post-processed by the SLD
> >>>engine.
> >>>
> >>> However, as soon as I add an additional<ogc:or> (or<ogc:and>) as:
> >>> #########################################
> >>> <ogc:or>
> >>> <ogc:PropertyIsEqualTo>
> >>> <ogc:PropertyName>basis_of_record_id</ogc:PropertyName>
> >>> <ogc:Literal>1</ogc:Literal>
> >>> </ogc:PropertyIsEqualTo>
> >>> <ogc:PropertyIsEqualTo>
> >>> <ogc:PropertyName>basis_of_record_id</ogc:PropertyName>
> >>> <ogc:Literal>2</ogc:Literal>
> >>> </ogc:PropertyIsEqualTo>
> >>> </ogc:or>
> >>> #########################################
> >>>
> >>> Mapserver doesn't add this additional AND/OR clause (and ((
> >>>("basis_of_record_id"= 1) OR ("basis_of_record_id" = 2) )) in this
> >>>case).. Why ?
> >>>
> >>> - Is it normal that my SLD is totally ignored when I'm using
> >>> REQUEST=GetFeatureInfo? Is the SLD only processed with
> >>> REQUEST=GetMap?
> >>> If this is the case, what's the typical alternative way of doing it?
> >>> Should I go through WFS .. ?
> >>>
> >>> In advance, thank you for your answers :) Julien
> >>>
> >>> --
> >>> No trees were killed in the creation of this message.
> >>> However, many electrons were terribly inconvenienced.
> >> _______________________________________________
> >> mapserver-users mailing list
> >> mapserver-users at lists.osgeo.org
> >> http://lists.osgeo.org/mailman/listinfo/mapserver-users
> >
> >
> >--
> >No trees were killed in the creation of this message.
> >However, many electrons were terribly inconvenienced.
> >
>
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users
More information about the MapServer-users
mailing list