[mapserver-users] some questions regarding getFeatureInfo, SLD, PostGIS

Julien Cigar jcigar at ulb.ac.be
Fri Sep 21 04:58:15 PDT 2012


On 09/21/2012 13:30, Rahkonen Jukka wrote:
> 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

The SQL and/or PL/pgSQL ways are indeed a good idea..(provided that the 
PostgreSQL planner generates equal plans)

Thank you!,
Julien

> -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
> _______________________________________________
> 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.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: jcigar.vcf
Type: text/x-vcard
Size: 292 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20120921/eb24835d/attachment.vcf>


More information about the mapserver-users mailing list