[Mapserver-users] Re: filter with shp

John Hagstrand john.hagstrand at interageresearch.com
Thu Mar 20 17:43:47 PST 2003


Hi Jan,

Thank you very much.  I've got it working now.  Excellent. (I see I should 
have been able to figure it out from the documentation.)

Thanks
John
-------------------------

John,
As Steve says, you don't need FILTER to select from shapfiles. Just
define a CLASS like:
CLASS
...
EXPRESSION "([TIMEBEG] < 1500 AND [TIMEEND] >= 1500)"
END

Take care of the syntax! Quoting from the MapFile reference (under CLASS
/ EXPRESSION):
 > Logical expressions allow you to build fairly complex tests based on
 > one or more attributes and therefore are only available with
 > shapefiles. Logical expressions are delimited by parentheses
 > "(expression)". Attribute names are delimited by square brackets
 > "[ATTRIBUTE]". These names are case sensitive and must match the items
 > in the shapefile. For example: EXPRESSION ([POPULATION] > 50000 AND
 > '[LANGUAGE]' eq 'FRENCH') ... The following logical operators are
 > supported : =,>,<,<=,>=,=,or,and,lt,gt,ge,le,eq. As you might expect
 > this level of complexity is slower to process.

On your second question: you can specify an expression dynamically in
the calling URL:
http://.../mapserv?map=my.map&layer=...&map_layer_0_class_0.expression="{...)"
See the end of the MapFile reference for this very powerful mechanism.
-------------------------------------------------------------------------
BTW I'm not sure if the FILTER statement works as specified in the CVS
version of MapServer. I tried the following on a world-map:
FILTERITEM name
FILTER France
and got a map of France. However
FILTER "name='France'"
gave back the whole world. I tried various permutations of quotes,
brackets and capitals, but always got back the whole world. Am I missing
something?
Jan

John Hagstrand wrote:
 > Hi Steve,
 >
 > Thanks for the reply. I have a shapefile containing 500 polygons. For
 > any given map request I want to pull out some two or three hundred
 > polygons depending on the value of a field. So I tried doing this:
 >
 > FILTER 'TIMEBEG < 1500 AND TIMEEND >= 1500'
 >
 > That gets me an error. Is there some way I can accomplish this objective?
 >
 > Then of course there's another step: I want to vary the 1500 value
 > dynamically. I wonder if there's a way to do that without rewriting the
 > whole mapfile each time.
 >
 > How would you recommend I go about this?
 > Thanks
 > John
 >
 > At 05:26 PM 3/18/2003, Steve Lime wrote:
 >
 >> There's not much reason to use FILTER with shapefiles unless you're
 >> doing itemquery's. Filters exist primarily as a mechanism to invoke
 >> vendor specific SQL engines prior to MapServer getting access to
 >> features.
 >>
 >> Steve
 >>
 >> >>> John Hagstrand <john.hagstrand at interageresearch.com> 03/16/03
 >> 09:15PM >>>
 >> Hi,
 >>
 >> Can you direct me to an example using a FILTER with a shapefile?
 >>
 >> Thanks
 >> John





More information about the MapServer-users mailing list