我可以使用下面的代码检索和设置WMSLayer,但是我想向服务器传递一些额外的选项(特别是,使用logscale和设置colorscale范围)WMSLayer构造函数接受一个options参数,但这必须是一个(unicode)字符串列表,并且我无法设置与参数对应的值。
也就是说,我可以通过options=['logscale'](如下所示),但尝试将其设置为True或False(或“True”或“False”)失败,尝试了options=['logscale', 'true']options=['logscale=true']等变体。
检查发送到服务器的参数(js控制台将显示错误)表明使用了“logscale”,但始终设置为未定义。也就是说,https://some-server.domain.tld/thredds/wms/somefile.nc?service=WMS&request=...&logscale=undefined&...
如何在WMSLayer构造函数中传递额外选项的值?
是否真的有办法从ipyleaflet到底层的fluel.js获得额外的选项?

import ipyleaflet
from owslib.wms import WebMapService

wms_url = "https://some-server.domain.tld/thredds/wms/somefile.nc"
wms_layers = list(WebMapService(wms_url).contents.keys())
wms = ipyleaflet.WMSLayer(url=wms_url, layers=wms_layers[0], transparent=True,
                      format='image/png', opacity=0.33, options=['logscale'])

m = ipyleaflet.Map(zoom=3)
m.add_layer(wms)
# fetch map and display in Jupyter cell
m

最佳答案

您可以子类化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)

生成的url将包含:
...&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&...的url,这是layertransparent选项的默认值,因此在调用layers=wms_layers[0]时将忽略transparent=TrueWMSLayer

08-28 04:58