By using a new feature of MapServer 4.9 +, i.e. OWSDispath,
I tried to dynamically add new classes into the original map file.
My code is the following:
#!/usr/local/bin/python
import cgi
import cgitb; cgitb.enable()
import mapscript as ms
cgi_queryitems = ['classitem', 'classification', 'numclass']
cgi_layers = ['bnd_1940', 'bnd_1950']
form = cgi.FieldStorage()
req = ms.OWSRequest()
# req.loadParams()
for key in form.keys():
if key not in cgi_queryitems:
req.setParameter(key, form[key].value)
map = ms.mapObj('/Users/myunghwa/Sites/Riverweb2/Riverweb.map')
for layer in cgi_layers:
aLayer = map.getLayerByName(layer)
firstClass = ms.classObj(aLayer)
firstClass.name = "Total Population < 3000"
firstClass.setExpression("([%s] < %s)" % ('poptotal', '3000') )
firstStyle = ms.styleObj(firstClass)
firstStyle.color.setRGB(0, 255, 0)
firstStyle.outlinecolor.setRGB(0, 0, 255)
aLayer.moveClassUp(1)
secondClass = ms.classObj(aLayer)
secondClass.name = "Total Population >= 3000"
secondClass.setExpression("([%s] >= %s)" % ('poptotal', '3000') )
secondStyle = ms.styleObj(secondClass)
secondStyle.color.setRGB(0, 180, 0)
secondStyle.outlinecolor.setRGB(0, 0, 255)
aLayer.moveClassUp(2)
aLayer.status = 1
map.OWSDispatch(req)
If I remove the second for loop, it worked well.
But if I include the second for, it just shows a white image.
If anybody knows why it happens, please let me know.
Or if you explain how OWSDispatch works, it'll be greatly helpful.
from Myunghwa Hwang