[mapserver-users] Performance in regular expressions or an alternative way to select a list of features

Fawcett, David David.Fawcett at state.mn.us
Tue Jul 14 09:34:30 EDT 2009


Adrian, 
 
One method that I have used is to use an IN statement in my expression
and then use a variable to populate the list of IDs in the statement.  
 
I create a class like this:
 
 CLASS
       NAME "Low"
       EXPRESSION ('[COUNTY_FIP]' in '%group1%')
       OUTLINECOLOR 0 0 0   
       COLOR 255 204 204
    END
 
And then in the URL calling the map, I include &group1=27001,27003,27005
 
I actually use this with five classes (five different URL vars) to
create a thematic map of counties based entirely on data passed in
through the URL.  
 
I have no idea on how the performance of this method compares to what
you have done, but it might be worth a try.  There are only 87 counties
in Minnesota, so that is the largest number it gets, but the performance
isn't bad.
 
David.

	-----Original Message-----
	From: mapserver-users-bounces at lists.osgeo.org
[mailto:mapserver-users-bounces at lists.osgeo.org] On Behalf Of Adrian
Popa
	Sent: Tuesday, July 14, 2009 1:15 AM
	To: mapserver-users at lists.osgeo.org
	Subject: [mapserver-users] Performance in regular expressions or
an alternative way to select a list of features
	
	
	Hello everyone,
	
	Here's my problem: I'm trying to highlight segments from a line
layer by using an expression in a specific class. This portion of the
mapfile is dynamically generated and when it is done, it is sent to
mapserver for rendering. 
	My problem is that I have to select between 10 - 400 features at
a time and I noticed when I have a lot of features there is a severe
performance degradation in mapserver (takes a lot of time to render or
even times out).
	Right now, my expression is built using regular expressions:
something like:
	EXPRESSION /^ITEM1$|^ITEM2$|^ITEM3$|^ITEM4$/
	This works ok, but as I said has a performance penalty when you
reach ~400 items.  My data is selected from a shapefile layer which has
about 5500 items.
	
	Since I wouldn't be using the regular expressions at full
capacity (I'm matching the full name), I might rewrite the expression
using something like:
	EXPRESSION ( ([NAME]=="ITEM1") OR ([NAME]=="ITEM2") OR
([NAME]=="ITEM3") OR ([NAME]=="ITEM4") )
	
	From the documentation I see that:
	Regular expression with MapServer work similarly to string
comparison, but allow more complex operation. They are slower than pure
string comparisons, but might be still faster than logical expression.
As with the string comparison use regular expressions, a FILTERITEM or a
CLASSITEM has to defined, respectively.
	
	I would like to know if there is an efficient way of selecting a
list of elements from a layer, or what are your recommendations.
	
	Also - have there been significant changes in performance for
this issue from mapserver 4.10 (I am now migrating to mapserver 5.4)?
	
	Thanks,
	Adrian
	
	

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapserver-users/attachments/20090714/e5db6fef/attachment.html


More information about the mapserver-users mailing list