[mapserver-users] multiple matches in $classObj->setexpression

Puneet Kishor pkishor at GeoAnalytics.com
Sun Apr 7 20:24:47 PDT 2002


thanks to sw and sdl, I now know how to do this (will try it out 
tomorrow at work). one thing though... the documentation makes a very 
cursory mention of this peculiarity without really pointing it out...

Specifically, I could find only one passing references to attribs in 
shape files at http://mapserver.gis.umn.edu/doc/mapfile-reference.html

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

see the '[LANGUAGE]' eq 'FRENCH' bit... that escaped me completely, and 
now is noticeable only because I have been educated about it.

Nonetheless, many thanks,

pk/




On Friday, April 5, 2002, at 07:07  PM, Stephen Woodbridge wrote:

> Puneet,
>
> You want to use a regular expression so in your mapfile you would say:
>
> CLASSITEM "GIS_KEY"
> CLASS
>   EXPRESSION /^foo$|^bar$|^baz$/
>
> or in php you would say something like:
>
> $oLayer->set("classitem", "GIS_KEY");
>   ...
> $oClass->setexpression("/^foo$|^bar$|^baz$/");
>
> I haven't tested this but it should be close to this syntax. Give it a
> try and let us know how it goes.
>
> -Steve W.
>
> Puneet Kishor wrote:
>>
>> with the following in my map file...
>>
>> LAYER
>>   NAME "parcels_highlight"
>>   TYPE polygon
>>   DATA parcel
>>   STATUS off
>>         CLASSITEM "OWNER"
>>   CLASS
>>     OUTLINECOLOR 255 0 0
>>     COLOR 255 255 0
>>   END
>>   TEMPLATE "parcels.php"
>> END
>>
>> The following works fine...
>>
>> $str = "foo";
>> $classObj->setexpression("\"$str\"");
>> $layerObj->set("status", 1);
>>
>> But I want to do the following, which, needless to say, does not 
>> work...
>>
>> $str = "([GIS_KEY] in (\"foo\", \"bar\", \"baz\"))";
>> $classObj->setexpression("\"$str \"");
>> $layerObj->set("status", 1);
>>
>> In fact, I can't even get the following to work...
>>
>> $str = "([GIS_KEY] eq \"foo\")"; OR
>> $str = "([GIS_KEY] == \"foo\")"; OR
>> $str = "([GIS_KEY] eq 'foo')"; etc.
>>
>> What am I missing here? And if the "in" clause is not supported 
>> (doesn't
>> seem to be per the docs), would I need to do the following...
>>
>> $str = "(([GIS_KEY] eq \"foo\") or ([GIS_KEY] eq \"bar\") or 
>> ([GIS_KEY] eq
>> \"baz\"))";
>>
>> Tia,
>>
>> pk/




More information about the MapServer-users mailing list