如何在ipyleaflet中为WMS图层设置其他选项?

时间:2019-02-01 15:40:02

标签: python leaflet jupyter wms

我可以使用下面的代码检索和设置WMSLayer,但我想将一些额外的选项传递给服务器(特别是使用对数刻度并设置色阶范围)。 WMSLayer构造函数带有一个options参数,但这必须是(unicode)字符串的列表,并且我无法设置与参数对应的值。
也就是说,我可以传递options=['logscale'](如下所示),但是尝试将其设置为True或False(或“ true”或“ false”)失败,并尝试了options=['logscale', 'true']或{{ 1}}。

检查发送到服务器的参数(JS控制台将显示错误),表明已使用“ logscale”,但始终设置为undefined。也就是说,类似options=['logscale=true']

如何在WMSLayer构造函数中传递额外选项的值?
确实有办法从ipyleaflet到基础leaflet.js来获取其值的额外选项吗?

https://some-server.domain.tld/thredds/wms/somefile.nc?service=WMS&request=...&logscale=undefined&...

1 个答案:

答案 0 :(得分:4)

您可以继承WMSLayer来添加新选项,如下所示:

from ipyleaflet import WMSLayer
from traitlets import Bool

class WMSLayerCustom (WMSLayer):
    # Additional options
    logscale = Bool(True).tag(sync=True, o=True)

然后使用子类ipyleaflet.WMSLayer而不是使用WMSLayerCustom

wms = WMSLayerCustom(url=wms_url, layers=wms_layers[0], transparent=True, 
                       format='image/png', opacity=0.33, logscale=True)

,结果网址将包含:

...&version=1.1.1&logscale=true&width=256&...


options关键字参数未记录,并且似乎无法用于设置其他选项。

我还注意到,由于WMSLayer类继承自HasTraits模块中的traitlets类,因此构造函数中可以接受任何关键字参数。设置参数options=['logscale']只会覆盖options实例的WMSLayer属性。

例如,如果您致电:

wms = ipyleaflet.WMSLayer(url=wms_url, layers=wms_layers[0], transparent=True, 
                  format='image/png', opacity=0.33, options=['max_zoom'])

您将获得一个带有&layers=&...&transparent=false&...的网址,这是layertransparent选项的默认设置,从而在对{的调用中忽略了layers=wms_layers[0]transparent=True {1}}。