Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions mslib/msui/wms_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,10 @@ def getmap(self, layers=None, styles=None, srs=None, bbox=None,

"""
base_url = self.get_redirect_url(method)
request = {'version': self.version, 'request': 'GetMap'}
request_version = str(self.version)
request = {'version': request_version, 'request': 'GetMap'}

if self.version != "1.3.0":
if request_version != "1.3.0":
exceptions = "application/vnd.ogc.se_xml"

# check layers and styles
Expand All @@ -140,15 +141,24 @@ def getmap(self, layers=None, styles=None, srs=None, bbox=None,
request['width'] = str(size[0])
request['height'] = str(size[1])

request['srs' if self.version != "1.3.0" else "crs"] = str(srs)
srs_string = str(srs)
request['srs' if request_version != "1.3.0" else "crs"] = srs_string
request['format'] = str(format)
request['transparent'] = str(transparent).upper()
request['bgcolor'] = '0x' + bgcolor[1:7]
request['exceptions'] = str(exceptions)

# ++(mss)
if bbox is not None:
request['bbox'] = ','.join([str(x) for x in bbox])
bbox_values = tuple(bbox)
if request_version == "1.3.0" and srs_string.upper().startswith("EPSG"):
try:
epsg_code = int(srs_string.split(":", 1)[1])
except (IndexError, ValueError):
epsg_code = None
if epsg_code in axisorder_yx:
bbox_values = (bbox_values[1], bbox_values[0], bbox_values[3], bbox_values[2])
request['bbox'] = ','.join([str(x) for x in bbox_values])
if path_str is not None:
request['path'] = path_str

Expand Down Expand Up @@ -630,11 +640,7 @@ def style_changed(layer):
args = []
for i, layer_itr in enumerate(layers):
transparent = self.cbTransparent.isChecked() if i == 0 else True
bbox_tmp = tuple(bbox)
wms = self.multilayers.layers[layer_itr.wms_name]["wms"]
if wms.version == "1.3.0" and crs.startswith("EPSG") and int(crs[5:]) in axisorder_yx:
bbox_tmp = (bbox[1], bbox[0], bbox[3], bbox[2])
args.extend(self.retrieve_image(layer_itr, crs, bbox_tmp, None, width, height, transparent))
args.extend(self.retrieve_image(layer_itr, crs, bbox, None, width, height, transparent))

self.fetch.emit(args)
elif view_name == "side":
Expand Down Expand Up @@ -1861,11 +1867,7 @@ def get_map(self, layers=None):
args = []
for i, layer in enumerate(layers):
transparent = self.cbTransparent.isChecked() if i == 0 else True
bbox_tmp = tuple(bbox)
wms = self.multilayers.layers[layer.wms_name]["wms"]
if wms.version == "1.3.0" and crs.startswith("EPSG") and int(crs[5:]) in axisorder_yx:
bbox_tmp = (bbox[1], bbox[0], bbox[3], bbox[2])
args.extend(self.retrieve_image(layer, crs, bbox_tmp, None, width, height, transparent))
args.extend(self.retrieve_image(layer, crs, bbox, None, width, height, transparent))

self.fetch.emit(args)

Expand Down
31 changes: 31 additions & 0 deletions tests/_test_msui/test_wms_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -736,3 +736,34 @@ def test_xml_time_error(self):
self.window.activate_wms(wc.MSUIWebMapService(None, version='1.1.1', xml=testxml))
assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())] == []
assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == []

def test_getmap_reorders_bbox_for_wms130_epsg4326(self):
testxml = self.xml.format("", self.srs_base, self.dimext_time + self.dimext_inittime + self.dimext_elevation)
wms = wc.MSUIWebMapService(None, version='1.1.1', xml=testxml)
wms.version = "1.3.0"
url = wms.getmap(
layers=["ecmwf_EUR_LL015.PLTemp01"],
styles=[""],
srs="EPSG:4326",
bbox=(-180, -90, 180, 90),
format="image/png",
size=(200, 100),
return_only_url=True,
)
query = urllib.parse.parse_qs(urllib.parse.urlsplit(url).query)
assert query["bbox"][0] == "-90,-180,90,180"

def test_getmap_preserves_bbox_for_wms111_epsg4326(self):
testxml = self.xml.format("", self.srs_base, self.dimext_time + self.dimext_inittime + self.dimext_elevation)
wms = wc.MSUIWebMapService(None, version='1.1.1', xml=testxml)
url = wms.getmap(
layers=["ecmwf_EUR_LL015.PLTemp01"],
styles=[""],
srs="EPSG:4326",
bbox=(-180, -90, 180, 90),
format="image/png",
size=(200, 100),
return_only_url=True,
)
query = urllib.parse.parse_qs(urllib.parse.urlsplit(url).query)
assert query["bbox"][0] == "-180,-90,180,90"