Skip to content

Commit

Permalink
map background cleanup. Fixes #12. Fixes #20. Fixes #22.
Browse files Browse the repository at this point in the history
  • Loading branch information
manelclos committed Jun 6, 2014
1 parent cfa29d8 commit dd0cb81
Show file tree
Hide file tree
Showing 5 changed files with 184 additions and 8 deletions.
30 changes: 24 additions & 6 deletions ogcserver/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,13 +384,31 @@ def _buildMap(self, params):
# raise OGCException('STYLES length does not match LAYERS length.')
m = Map(params['width'], params['height'], '+init=%s' % params['crs'])

if params.has_key('transparent') and params['transparent'] in ('FALSE','False','false'):
if params['bgcolor']:
m.background = params['bgcolor']
elif not params.has_key('transparent') and self.mapfactory.map_attributes.get('bgcolor'):
m.background = self.mapfactory.map_attributes['bgcolor']
transparent = params.get('transparent', '').lower() == 'true'

# disable transparent on incompatible formats
if transparent and params.get('format', '') == 'image/jpeg':
transparent = False

if transparent:
# transparent has highest priority
pass
elif params.has_key('bgcolor'):
# if not transparent use bgcolor in url
m.background = params['bgcolor']
else:
m.background = Color(0, 0, 0, 0)
# if not bgcolor in url use map background
if mapnik_version() >= 200000:
bgcolor = self.mapfactory.map_attributes.get('bgcolor', None)
else:
bgcolor = self.mapfactory.map_attributes.get('background-color', None)

if bgcolor:
m.background = bgcolor
else:
# if not map background defined use white color
m.background = Color(255, 255, 255, 0)


if params.has_key('buffer_size'):
if params['buffer_size']:
Expand Down
2 changes: 1 addition & 1 deletion ogcserver/wms111.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class ServiceHandler(WMSBaseServiceHandler):
'height': ParameterDefinition(True, int),
'format': ParameterDefinition(True, str, allowedvalues=('image/png','image/png8', 'image/jpeg')),
'transparent': ParameterDefinition(False, str, 'FALSE', ('TRUE', 'FALSE','true','True','false','False')),
'bgcolor': ParameterDefinition(False, ColorFactory, ColorFactory('0xFFFFFF')),
'bgcolor': ParameterDefinition(False, ColorFactory, None),
'exceptions': ParameterDefinition(False, str, 'application/vnd.ogc.se_xml', ('application/vnd.ogc.se_xml', 'application/vnd.ogc.se_inimage', 'application/vnd.ogc.se_blank','text/html'),True)
},
'GetFeatureInfo': {
Expand Down
2 changes: 1 addition & 1 deletion ogcserver/wms130.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class ServiceHandler(WMSBaseServiceHandler):
'height': ParameterDefinition(True, int),
'format': ParameterDefinition(True, str, allowedvalues=('image/png','image/png8', 'image/jpeg')),
'transparent': ParameterDefinition(False, str, 'FALSE', ('TRUE', 'FALSE','true','True','false','False')),
'bgcolor': ParameterDefinition(False, ColorFactory, ColorFactory('0xFFFFFF')),
'bgcolor': ParameterDefinition(False, ColorFactory, None),
'exceptions': ParameterDefinition(False, str, 'XML', ('XML', 'INIMAGE', 'BLANK','HTML'),True),
},
'GetFeatureInfo': {
Expand Down
17 changes: 17 additions & 0 deletions tests/mapfile_background-color.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!DOCTYPE Map>
<Map srs="+init=epsg:4326" buffer-size="128" minimum-version="0.7.2" background-color="rgb(255,0,0)">

<Style name="test">
<Rule>
<PolygonSymbolizer fill-opacity="0.5" fill="#bee8ff"/></Rule>
</Style>

<Layer name="test">
<StyleName>test</StyleName>

<Datasource>
<Parameter name="type">shape</Parameter>
<Parameter name="file">empty</Parameter>
</Datasource>
</Layer>
</Map>
141 changes: 141 additions & 0 deletions tests/testGetMap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
import nose
import os
from ogcserver.configparser import SafeConfigParser
from ogcserver.WMS import BaseWMSFactory
from ogcserver.wms111 import ServiceHandler as ServiceHandler111
from ogcserver.wms130 import ServiceHandler as ServiceHandler130
from ogcserver.common import ColorFactory

def _wms_services(mapfile):
base_path, tail = os.path.split(__file__)
file_path = os.path.join(base_path, mapfile)
wms = BaseWMSFactory()
wms.loadXML(file_path)
wms.finalize()

conf = SafeConfigParser()
conf.readfp(open(os.path.join(base_path, 'ogcserver.conf')))

wms111 = ServiceHandler111(conf, wms, "localhost")
wms130 = ServiceHandler130(conf, wms, "localhost")

return (conf, {
'1.1.1': wms111,
'1.3.0': wms130
})

def test_no_background_color():
# load mapfile with no background-color definition
conf, services = _wms_services('mapfile_encoding.xml')

reqparams = {
'srs': 'EPSG:4326',
'bbox': '-180.0000,-90.0000,180.0000,90.0000',
'width': 800,
'height': 600,
'layers': '__all__',
'styles': '',
'format': 'image/png',
}

from ogcserver.WMS import ServiceHandlerFactory
mapfactory = BaseWMSFactory()
servicehandler = ServiceHandlerFactory(conf, mapfactory, '', '1.1.1')
ogcparams = servicehandler.processParameters('GetMap', reqparams)
ogcparams['crs'] = ogcparams['srs']
ogcparams['HTTP_USER_AGENT'] = 'unit_tests'

m = services['1.1.1']._buildMap(ogcparams)
print 'wms 1.1.1 backgound color: %s' % m.background
assert m.background == ColorFactory('rgb(255,255,255,0)')

m = services['1.3.0']._buildMap(ogcparams)
print 'wms 1.3.0 backgound color: %s' % m.background
assert m.background == ColorFactory('rgb(255,255,255,0)')

def test_map_background_color():
conf, services = _wms_services('mapfile_background-color.xml')

reqparams = {
'srs': 'EPSG:4326',
'bbox': '-180.0000,-90.0000,180.0000,90.0000',
'width': 800,
'height': 600,
'layers': '__all__',
'styles': '',
'format': 'image/png',
}

from ogcserver.WMS import ServiceHandlerFactory
mapfactory = BaseWMSFactory()
servicehandler = ServiceHandlerFactory(conf, mapfactory, '', '1.1.1')
ogcparams = servicehandler.processParameters('GetMap', reqparams)
ogcparams['crs'] = ogcparams['srs']
ogcparams['HTTP_USER_AGENT'] = 'unit_tests'

m = services['1.1.1']._buildMap(ogcparams)
print 'wms 1.1.1 backgound color: %s' % m.background
assert m.background == ColorFactory('rgb(255,0,0)')

m = services['1.3.0']._buildMap(ogcparams)
print 'wms 1.3.0 backgound color: %s' % m.background
assert m.background == ColorFactory('rgb(255,0,0)')

def test_url_background_color():
conf, services = _wms_services('mapfile_background-color.xml')

reqparams = {
'srs': 'EPSG:4326',
'bbox': '-180.0000,-90.0000,180.0000,90.0000',
'width': 800,
'height': 600,
'layers': '__all__',
'styles': '',
'format': 'image/png',
'bgcolor': '0x00FF00',
}

from ogcserver.WMS import ServiceHandlerFactory
mapfactory = BaseWMSFactory()
servicehandler = ServiceHandlerFactory(conf, mapfactory, '', '1.1.1')
ogcparams = servicehandler.processParameters('GetMap', reqparams)
ogcparams['crs'] = ogcparams['srs']
ogcparams['HTTP_USER_AGENT'] = 'unit_tests'

m = services['1.1.1']._buildMap(ogcparams)
print 'wms 1.1.1 backgound color: %s' % m.background
assert m.background == ColorFactory('rgb(0,255,0)')

m = services['1.3.0']._buildMap(ogcparams)
print 'wms 1.3.0 backgound color: %s' % m.background
assert m.background == ColorFactory('rgb(0,255,0)')

def test_url_background_color_transparent():
conf, services = _wms_services('mapfile_background-color.xml')

reqparams = {
'srs': 'EPSG:4326',
'bbox': '-180.0000,-90.0000,180.0000,90.0000',
'width': 800,
'height': 600,
'layers': '__all__',
'styles': '',
'format': 'image/png',
'bgcolor': '0x00FF00',
'transparent': 'TRUE',
}

from ogcserver.WMS import ServiceHandlerFactory
mapfactory = BaseWMSFactory()
servicehandler = ServiceHandlerFactory(conf, mapfactory, '', '1.1.1')
ogcparams = servicehandler.processParameters('GetMap', reqparams)
ogcparams['crs'] = ogcparams['srs']
ogcparams['HTTP_USER_AGENT'] = 'unit_tests'

m = services['1.1.1']._buildMap(ogcparams)
print 'wms 1.1.1 backgound color: %s' % m.background
assert m.background == None

m = services['1.3.0']._buildMap(ogcparams)
print 'wms 1.3.0 backgound color: %s' % m.background
assert m.background == None

0 comments on commit dd0cb81

Please sign in to comment.