如何在 ipyleaflet 中为 WMS 层设置额外选项?

How do I set extra options for a WMS layer in ipyleaflet?

我可以使用下面的代码检索和设置 WMSLayer,但我想将一些额外的选项传递给服务器(特别是使用对数标度和设置色标范围)。 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 到底层 leaflet.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

您可以子class WMSLayer 添加新选项,如下所示:

from ipyleaflet import WMSLayer
from traitlets import Bool

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

然后不使用 ipyleaflet.WMSLayer,而是使用子class 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 class 继承自 traitlets 模块中的 HasTraits。设置参数 options=['logscale'] 只是覆盖 WMSLayer 实例的 options 属性。

例如,如果您调用:

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

你得到一个 url 和 &layers=&...&transparent=false&...,这是 layertransparent 选项的默认值,因此忽略 layers=wms_layers[0]transparent=True 在对 WMSLayer.

的调用中