From 0d2c5e9eef36b546106a4ede67001fb55df59bd7 Mon Sep 17 00:00:00 2001 From: Reimar Bauer Date: Thu, 2 Apr 2026 11:44:57 +0200 Subject: [PATCH] bbox_values reorder independent of top_view --- mslib/msui/wms_control.py | 30 ++++++++++++++------------- tests/_test_msui/test_wms_control.py | 31 ++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/mslib/msui/wms_control.py b/mslib/msui/wms_control.py index bc79ecb2a..292943aeb 100644 --- a/mslib/msui/wms_control.py +++ b/mslib/msui/wms_control.py @@ -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 @@ -140,7 +141,8 @@ 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] @@ -148,7 +150,15 @@ def getmap(self, layers=None, styles=None, srs=None, bbox=None, # ++(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 @@ -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": @@ -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) diff --git a/tests/_test_msui/test_wms_control.py b/tests/_test_msui/test_wms_control.py index 219964c04..dd7031fab 100644 --- a/tests/_test_msui/test_wms_control.py +++ b/tests/_test_msui/test_wms_control.py @@ -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"