+ implement a layer copy method, provide a 'default' layername that will return a map with all layers rendered, and clean up PIL imports
This commit is contained in:
parent
e24b6f3654
commit
577ee5ee22
1 changed files with 36 additions and 5 deletions
|
@ -20,8 +20,8 @@
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
from exceptions import OGCException, ServerConfigurationError
|
from exceptions import OGCException, ServerConfigurationError
|
||||||
from mapnik import Map, Color, Envelope, render, Image, Projection as MapnikProjection, render_to_file, Coord
|
from mapnik import Map, Color, Envelope, render, Image, Layer, Style, Projection as MapnikProjection, render_to_file, Coord
|
||||||
from PIL.Image import fromstring, new
|
from PIL.Image import new
|
||||||
from PIL.ImageDraw import Draw
|
from PIL.ImageDraw import Draw
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
@ -277,6 +277,30 @@ class CRSFactory:
|
||||||
else:
|
else:
|
||||||
raise OGCException('Invalid CRS Namespace: %s' % crsparts[0], 'InvalidCRS')
|
raise OGCException('Invalid CRS Namespace: %s' % crsparts[0], 'InvalidCRS')
|
||||||
|
|
||||||
|
def copy(obj):
|
||||||
|
if isinstance(obj,Layer):
|
||||||
|
lyr = Layer(obj.name)
|
||||||
|
lyr.abstract = obj.abstract
|
||||||
|
lyr.active = obj.active
|
||||||
|
lyr.clear_label_cache = obj.clear_label_cache
|
||||||
|
lyr.datasource = obj.datasource
|
||||||
|
#lyr.maxzoom = obj.maxzoom
|
||||||
|
#lyr.minzoom = obj.minzoom
|
||||||
|
lyr.queryable = obj.queryable
|
||||||
|
lyr.srs = obj.srs
|
||||||
|
lyr.title = obj.title
|
||||||
|
if hasattr(obj,'wmsdefaultstyle'):
|
||||||
|
lyr.wmsdefaultstyle = obj.wmsdefaultstyle
|
||||||
|
if hasattr(obj,'wmsextrastyles'):
|
||||||
|
lyr.wmsextrastyles = obj.wmsextrastyles
|
||||||
|
return lyr
|
||||||
|
|
||||||
|
elif isinstance(obj,Style):
|
||||||
|
sty = Style()
|
||||||
|
for rule in obj.rules:
|
||||||
|
sty.rules.append(rule)
|
||||||
|
return sty
|
||||||
|
|
||||||
class WMSBaseServiceHandler(BaseServiceHandler):
|
class WMSBaseServiceHandler(BaseServiceHandler):
|
||||||
|
|
||||||
def GetMap(self, params):
|
def GetMap(self, params):
|
||||||
|
@ -324,12 +348,19 @@ class WMSBaseServiceHandler(BaseServiceHandler):
|
||||||
maplayers = self.mapfactory.layers
|
maplayers = self.mapfactory.layers
|
||||||
mapstyles = self.mapfactory.styles
|
mapstyles = self.mapfactory.styles
|
||||||
mapaggregatestyles = self.mapfactory.aggregatestyles
|
mapaggregatestyles = self.mapfactory.aggregatestyles
|
||||||
for layerindex, layername in enumerate(params['layers']):
|
if params['layers'] and params['layers'][0] == 'default':
|
||||||
|
layer_group = enumerate(maplayers)
|
||||||
|
else:
|
||||||
|
layer_group = enumerate(params['layers'])
|
||||||
|
for layerindex, layername in layer_group:
|
||||||
try:
|
try:
|
||||||
layer = maplayers[layername]
|
layer = copy(maplayers[layername])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise OGCException('Layer "%s" not defined.' % layername, 'LayerNotDefined')
|
raise OGCException('Layer "%s" not defined.' % layername, 'LayerNotDefined')
|
||||||
|
try:
|
||||||
reqstyle = params['styles'][layerindex]
|
reqstyle = params['styles'][layerindex]
|
||||||
|
except IndexError:
|
||||||
|
reqstyle = ''
|
||||||
if reqstyle and reqstyle not in layer.wmsextrastyles:
|
if reqstyle and reqstyle not in layer.wmsextrastyles:
|
||||||
raise OGCException('Invalid style "%s" requested for layer "%s".' % (reqstyle, layername), 'StyleNotDefined')
|
raise OGCException('Invalid style "%s" requested for layer "%s".' % (reqstyle, layername), 'StyleNotDefined')
|
||||||
if not reqstyle:
|
if not reqstyle:
|
||||||
|
|
Loading…
Reference in a new issue