[mapserver-users] Mapserver Expressions

Lime, Steve D (MNIT) Steve.Lime at state.mn.us
Tue Dec 17 08:30:00 PST 2013


Yes, something like that. I'll try and set up a test case here too.

-----Original Message-----
From: Charlie Allgrove [mailto:charlie.allgrove at bsgwireless.com] 
Sent: Tuesday, December 17, 2013 10:28 AM
To: Lime, Steve D (MNIT); 'Eichner, Andreas - SID-NLKM'; mapserver-users at lists.osgeo.org
Subject: RE: [mapserver-users] Mapserver Expressions

So...
Given my shapefile contains 2 attributes only, LAT and LONG, I *think* you're suggesting something like this:

Adding CLASSITEM 'LAT' into the LAYER
and modifying the expressions in my original post (for example) FROM ...
EXPRESSION('%tile%' ~ '16$')
...

TO
...
EXPRESSION(('%tile%' ~ '16$') && ([LAT] ne 0)) ...

Given my dataset, it's a safe assumption that LAT will never be 0.

Does that sound about right?

Thanks in advance!

Charlie

-----Original Message-----
From: Lime, Steve D (MNIT) [mailto:Steve.Lime at state.mn.us]
Sent: 17 December 2013 15:50
To: Eichner, Andreas - SID-NLKM; Charlie Allgrove; mapserver-users at lists.osgeo.org
Subject: RE: [mapserver-users] Mapserver Expressions

Assuming Andreas is correct, yes this would be a bug given cases like this.
I can create a ticket titled "Expressions without column references fail.".
As a work around Charlie could add a sub-expression to those expressions that depend on a column but that always evaluate to true.

Steve

-----Original Message-----
From: Eichner, Andreas - SID-NLKM [mailto:Andreas.Eichner at sid.sachsen.de]
Sent: Tuesday, December 17, 2013 8:01 AM
To: Lime, Steve D (MNIT); Charlie Allgrove; mapserver-users at lists.osgeo.org
Subject: AW: [mapserver-users] Mapserver Expressions

Substitution works quite well but classification does not because the class'
expression hasn't been tokenized when msEvalExpression is called by msShapeGetClass.

Root cause of this is in msLayerWhichItems(maplayer.c) which shall tokenize the class' expression but doesn't due to making this dependent of the number of used items being greater than zero. Since you don't use items anywhere in your layer they won't be tokenized at all and will always fail (return
FALSE) in msEvalExpression().

Basically it should be safe to simply comment out the if-expression in maplayer.c at line 700:

-  if(nt > 0) {
+  /* if(nt > 0) */ {

I strongly believe that this isn't intended behaviour and should be considered a bug.

> -----Ursprüngliche Nachricht-----
> Von: mapserver-users-bounces at lists.osgeo.org [mailto:mapserver-users- 
> bounces at lists.osgeo.org] Im Auftrag von Lime, Steve D (MNIT)
> Gesendet: Montag, 16. Dezember 2013 22:00
> An: Charlie Allgrove; mapserver-users at lists.osgeo.org
> Betreff: Re: [mapserver-users] Mapserver Expressions
> 
> Did you get this fixed? The layer looks right to me. --Steve
> 
> 
> 
> From: mapserver-users-bounces at lists.osgeo.org [mailto:mapserver- 
> users-bounces at lists.osgeo.org] On Behalf Of Charlie Allgrove
> Sent: Wednesday, December 11, 2013 11:11 AM
> To: mapserver-users at lists.osgeo.org
> Subject: [mapserver-users] Mapserver Expressions
> 
> 
> 
> Hi
> 
> 
> 
> I'm looking to change the symbol used on a given layer, based on the
> (Google) zoom level supplied to the mapserv CGI.
> 
> 
> 
> The Layer in question in the map file looks like this:
> 
> 
> 
> LAYER
> 
>     VALIDATION
> 
>         'tile'  '^[0-9]+ [0-9]+ [0-9]{1,2}$'
> 
>     END
> 
>     PROJECTION
> 
>         "init=epsg:4326"
> 
>     END
> 
>     NAME hubs
> 
>     TYPE point
> 
>     STATUS ON
> 
>     DATA 'hub_data.shp'
> 
>     CLASS
> 
>      EXPRESSION('%tile%' ~ '16$')
> 
>       NAME 'hub_layer_small'
> 
>       STYLE
> 
>         SYMBOL 'cloud_500'
> 
>       END #STYLE
> 
>     END #CLASS
> 
>     CLASS
> 
>       EXPRESSION('%tile%' ~ '17$')
> 
>       NAME 'hub_layer_large'
> 
>       STYLE
> 
>         SYMBOL 'cloud_200'
> 
>       END #STYLE
> 
>     END #CLASS
> 
>     CLASS
> 
>       NAME 'hub_layer_default'
> 
>       STYLE
> 
>         SYMBOL 'cloud_200'
> 
>        SIZE 2
> 
>       END #STYLE
> 
>     END #CLASS
> 
> 
> 
>     TEMPLATE "xxx"
> 
>         METADATA
> 
>             "wms_title" "Hub data layer"
> 
>         END
> 
>   END #LAYER
> 
> 
> 
> 
> 
> Requests are made to the CGI with the following example querystring:
> 
> ?layer=hubs&mode=tile&tilemode=gmap&tile=19288 24631 16
> 
> 
> 
> I *thought* it was possible to use EXPRESSION to test the 'tile'
> variable and act accordingly, but it's not working (I always get the 
> default class used instead).
> 
> 
> 
> > ./mapserv -v
> 
> MapServer version 6.0.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG 
> SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=CAIRO SUPPORTS=FREETYPE 
> SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER 
> SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT 
> SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI 
> SUPPORTS=THREADS SUPPORTS=GEOS INPUT=POSTGIS INPUT=OGR INPUT=GDAL 
> INPUT=SHAPEFILE
> 
> 
> 
> Any pointers? Thanks in advance.
> 
> 
> 
> Charlie
> 
> 








More information about the mapserver-users mailing list