[mapserver-users] default values if not provided in the URL

Puneet Kishor punk.kish at gmail.com
Thu Oct 27 14:48:53 PDT 2011


On Oct 27, 2011, at 12:07 PM, Smith, Michael ERDC-CRREL-NH wrote:

> I guess I get around that by passing class=1 as my filter so I can pass
> 1=1 as the default
> 

Hmmm... I didn't understand the above at all, but...


> If you want to set a default that gets all, perhaps you could use a like
> filter
> 
> FILTER "Class like %class%"
> 
> And a default of "%"
> 
> 


The suggestion above works quite well. Here is what I did

	FILTER "class LIKE '%%class%%'"

	METADATA
		'class_validation_pattern' '^[a-zA-Z ]+$'
		'default_class' '%'
	END


So, now I can do http://server/app and get everything. Or, request http://server/app?class=Foo and get a map with just "Foo".

Now, the next problem to solve is to allow giving multiple class(es) as in 

	http://server/app?class=Foo,Bar,Baz

The only way I can think is to modify the filter like so

	FILTER "class IN (%class%)"

which will allow me to pass values via 

	http://server/app?class='Foo','Bar' 

but then I won't be able to get all the class(es). Besides, gosh, that URI looks super ugly.

Thoughts? Maybe the cgi interface is malleable only to a degree. After that I have to start thinking of other ways of solving this.

So, here is what I am thinking -- insert a proxy in between. That would allow me to let the user formulate queries any which way I want, and then reformat those queries to the way mapserver expect them. Of course, this proxy would have to sit between mapserver and the rest of the apps, which in my world includes OpenLayers.

Would love any directions and suggestions to tackle this.



> 
> 
> 
> On 10/27/11 9:56 AM, "Puneet Kishor" <punk.kish at gmail.com> wrote:
> 
>> 
>> On Oct 27, 2011, at 11:22 AM, Smith, Michael ERDC-CRREL-NH wrote:
>> 
>>> Punnet,
>>> 
>>> What I do in the situations where I want to default to all or allow some
>>> filtered access is
>>> 
>>> METADATA
>>>  "default_classes" "1=1"
>>> END
>>> 
>>> So the dummy condition is passed when no filter is specified.
>>> 
>>> 
>>> 
>> 
>> 
>> Believe it or not, I thought up of the above solution myself but
>> discarded it because I understood the text in the documents to mean the
>> following --
>> 
>> 	FILTER "class = '%class%'"
>> 
>> will be applied if a class is provided. However, if no class is provided,
>> and if the following is provided
>> 
>> 	METADATA
>> 		"default_class" "1=1"
>> 	END
>> 
>> Then the filter will become "class = '1=1'", which is, of course not
>> correct. And, I just checked the logs with the above mods, and my
>> suspicion was proven correct. My log file shows ms croaking with the
>> following
>> 
>> select "class",encode(ST_AsBinary(ST_Force_2D("the_geoms"),'NDR'),'hex')
>> as geom,"gid" from table where the_geoms &&
>> GeomFromText('POLYGON((-180.150250417362 -90,-180.150250417362
>> 90,180.150250417362 90,180.150250417362 -90,-180.150250417362
>> -90))',4326) and (class = '1=1')
>> 
>> Obviously, I do not want "class = '1=1'"
>> 
>> 
>>> 	
>>> 
>>> 
>>> On 10/27/11 8:49 AM, "Puneet Kishor" <punk.kish at gmail.com> wrote:
>>> 
>>>> the fine manual says http://mapserver.org/cgi/runsub.html
>>>> 
>>>>> Since version 5.6, you can provide a default value for any
>>>>> substitution
>>>>> parameter, that will be applied if the parameter was not found in the
>>>>> url. 
>>>>> You do this by providing special entries inside the layer metadata :
>>>>> 
>>>>> 	METADATA
>>>>> 		'default_sound' 'yes'
>>>>> 		'default_nseats' '5'
>>>>> 		'default_multimedia' 'yes'
>>>>> 	END
>>>>> 
>>>>> In this example, the mapfile will be created as if the url contained
>>>>> ³&sound=yes&nseats=5&multimedia=yes²
>>>> 
>>>> 
>>>> Right then. Except, I want *all* my classes to be drawn if no class has
>>>> been provided. And, if one or more classes have been provided, then I
>>>> want only those to be drawn. So,
>>>> 
>>>> 	http://server/mapfile?mode=map
>>>> 
>>>> should return a map with all the 100+ classes in a layer. And
>>>> 
>>>> 	http://server/mapfile?mode=map&classes=Foo,Bar
>>>> 
>>>> (or some other variation of the above) should return a map with only
>>>> the
>>>> requested classes in the layer. I can't think of anyway of doing the
>>>> above without resorting to scripting, and I still have had no luck with
>>>> WMS returned from Perl MapScripting.
>>>> 
>>>> Suggestions.
>>>> 
>>>> --
>>>> Puneet Kishor_______________________________________________
>>>> 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