matplotlib / basemap

Plot on map projections (with coastlines and political boundaries) using matplotlib
MIT License
779 stars 392 forks source link

wmsimage not supporting wms version #602

Open carlosloslas opened 5 months ago

carlosloslas commented 5 months ago

Been using OWSLib to extract pictures from a WMS server version 1.3.0 and was looking to visualise them with Basemap's wmsimage.

I am seeing in the error traces that when the WebMapService instance is initialised is missing the version number is missing, which results in an initialisation of WMS version 1.1.1 , which causes the errors.

image

I looked at the source code and the problem is line 4455 of basemap/init.py

The wms is initialised just with the server url wms = WebMapService(server) and in reality it should have the version number included there wms = WebMapService(server, version=kwargs['version'])

molinav commented 5 months ago

Hi, @carlosloslas! Thanks for the feedback. Is the patch wms = WebMapService(server, version=kwargs['version']) working as expected in your basemap installation? If so, it should be easy to correct in the repo. For the library patch, I would replace kwargs['version'] with something like kwargs.get('version', None) or an appropriate default version value, since we also need to consider the case in which no version is provided, as before.

Kurea commented 5 months ago

Hi, the bbox arg might be impacted too. I'm working on that too. I'll let you know if I manage to make it work. My bad, I needed another coffee.

kwargs.get('version', None) won't work as it will pass None instead of a valid version value (which is mandatory). I suggest to manage all constructors parameters for WebMapService like this:

        wmsInitKeys = ['version', 'xml', 'username', 'password','parse_remote_metadata', 'timeout', 'headers', 'auth']
        wms_options = {k:kwargs[v] for k in wmsInitKeys if k in kwargs}
        kwargs = {k:kwargs[v] for k in kwargs if k not in wmsInitKeys}
        wms = WebMapService(server, **wms_options)
carlosloslas commented 5 months ago

Hi @molinav, thanks for the reply. I'm not running a dev version of the package, so I can't say for sure. I've been working with OWSLib all day and I'm very confident it will.

For a simple patch kwargs.get('version', '1.1.1') would be better since this is the default setting in the OWSLib. As you can see from my error trace, the wms111 refers to the version 1.1.1.

I would happily do some testing, but I've never contributed to a open source package and would need some guidance.