[mapserver-users] About FILTER and FILTERITEM

Lime, Steve D (MNIT) Steve.Lime at state.mn.us
Wed May 14 06:25:30 PDT 2014


FIlters are used primarily under the hood for certain types of query operations. The main differences are:

  - FILTERs are defined in the native query language of the underlying driver. So for PostGIS you'd actually write a little SQL snippet.
  - FILTERs are applied when data are pulled from the underlying data source (like a WHERE clause) and have no impact on rendering choices.

For drivers that don't have an native query capability (e.g. shapefiles) the syntax is identical to expressions. For drivers that do have a native query capability there really isn't much use for filters since you can just add a where clause to the data statement.

Where I have found them useful sometimes is for simplifying class expressions. Let's say you have a shapefile and you only want to show features of a certain type, and then for those features you want to draw things differently based on another attribute.

You could use logical expressions:

CLASS
  EXPRESSION ([type] = 1 AND '[attr]' = 'a')
  ...
END
CLASS
  EXPRESSION ([type] = 1 AND '[attr]' = 'b')
  ...
END

or you could use a combination of FILTER and EXPRESSIONS

FILTERITEM 'type'
FILTER '1'

CLASSITEM 'attr'
CLASS
  EXPRESSION 'a'
  ...
END
CLASS
  EXPRESSION 'b'
  ...
END

Personal preference I guess and the second option is a bit more performant, especially in older versions. I guess my recommendation would be avoid FILTERs unless you have a good reason to use them.

Steve

________________________________________
From: mapserver-users-bounces at lists.osgeo.org [mapserver-users-bounces at lists.osgeo.org] on behalf of Rahkonen Jukka  (Tike) [jukka.rahkonen at mmmtike.fi]
Sent: Wednesday, May 14, 2014 8:05 AM
To: mapserver-users at lists.osgeo.org
Subject: Re: [mapserver-users] About FILTER and FILTERITEM

Hi,

Thank you very much, Christy. By your example I made some tests and now filters like this work for me
FILTER (([WORKERS]>20000000) OR ("[STATE_FIPS]"="17"))

The secret element was the right syntax for string attributes  ("[STATE_FIPS]"="17").
Now when I know how it must be used I can find corresponding examples from the expression page of Mapserver documentation. Could someone explain shortly what is the difference between filter and expression? To me they seem to do pretty similar work.

-Jukka Rahkonen-

Christy Nieman wrote:

> You do not need to set both FILTERITEM and FILTER.  You can just set FILTER to
> an expression using as many attributes as you need. e.g.
> FILTER (( [POPULATION] < 500000 ) AND ("[DISPLAY]" == "1")). Just like you can
> have multiple attributes in a class EXPRESSION.
>
> I think it's the section of the document that is key - the "MapServer Expressions"
> section talks about using FILTER and EXPRESSION in more complex logical
> expressions, where as the section you quoted is talking about basic string
> comparison.
>
> Christy
>
> On 14/05/14 08:03 AM, Rahkonen Jukka (Tike) wrote:
> > Hi,
> >
> >  From document page: http://mapserver.org/mapfile/expressions.html
> > "To use a string comparison for filtering a LAYER, both FILTERITEM and FILTER
> must be set. FILTERITEM is set to the attribute name. FILTER is set to the value
> for comparison. The same rule applies to CLASSITEM in the LAYER object and
> EXPRESSION in the CLASS object."
> >
> > That would mean that only one attribute from the data can be used for
> building a filter. Is this true or just old information living in the document?
> >
> > -Jukka Rahkonen-
> > _______________________________________________
> > 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
_______________________________________________
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