我可以使用下面的代码检索和设置 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 到底层传单的值获得额外的选项.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)
生成的网址将包含:
...&version=1.1.1&logscale=true&width=256&...
options
关键字参数没有记录,似乎不能用于设置其他选项。
我还注意到,构造函数中接受任何关键字参数,因为WMSLayer
类继承自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'])
您将获得一个包含&layers=&...&transparent=false&...
的 url,这些 url 是 layer
和 transparent
选项的默认值,从而忽略调用 WMSLayer
中的layers=wms_layers[0]
和transparent=True
。