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

Reply via email to