如何设置在ipyleaflet一个WMS层额外的选项?

问题描述 投票:3回答:1

我可以检索并设置WMSLayer与下面的代码,但我想通过一些额外的选项给服务器(特别是使用logscale并设置colorscale范围内)。该WMSLayer构造函数采用options说法,但这个要求是(Unicode)的字符串列表,我不能够设置相应的参数值。 也就是说,我可以通过options=['logscale'](如下),而是试图将其设置为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
python leaflet jupyter wms
1个回答
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类从HasTraitstraitlets模块中继承。设置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的URL在调用WMSLayer

© www.soinside.com 2019 - 2024. All rights reserved.