Recientemente he utilizado mapscript con web.py para generar mapas que sean generados en tiempo de ejecución, esta porción de código permite leer archivos .map y luego se renderizan con las opciones habituales de mapserver para WMS, el método POST adiciona algunas lines para permitir el uso de un servicio WFS dentro de mapserver.
Se puede utilizar jinja2 o algún otro manejador de templates para cambiar el .map en tiempo de ejecución y de esta forma poder enviar algún parámetro adicional para realizar cambios en el servicio WMS o WFS.
import web
import mapscript
# URLS
urls = (
'/','Basic',
)
class Basic:
"""Layers Basics
"""
def GET(self):
vars = web.input()
if len(vars)==0:
return info_layer(Basic)
req = mapscript.OWSRequest()
for i in vars.keys():
req.setParameter( i, vars[i])
map = mapscript.mapObj('basic.map')
mapscript.msIO_installStdoutToBuffer()
map.OWSDispatch( req )
content_type = mapscript.msIO_stripStdoutBufferContentType()
content = mapscript.msIO_getStdoutBufferBytes()
web.header("Content-Type","%s; charset=utf-8"%(content_type))
return content
def POST(self):
vars = web.input()
req = mapscript.OWSRequest()
for i in vars.keys():
req.setParameter( i, vars[i])
req.postrequest=web.data()
req.type=mapscript.MS_POST_REQUEST
map = mapscript.mapObj('basic.map')
mapscript.msIO_installStdoutToBuffer()
map.OWSDispatch( req )
content_type = mapscript.msIO_stripStdoutBufferContentType()
content = mapscript.msIO_getStdoutBufferBytes()
web.header("Content-Type","%s; charset=utf-8"%(content_type))
return content
app = web.application(urls, globals())
#web.internalerror = web.debugerror
if __name__ == "__main__":
app.run()