0 0*_*0 0 4 python wms leaflet jupyter
我可以使用下面的代码检索和设置 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 到底层的 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
Run Code Online (Sandbox Code Playgroud)
您可以子类化WMSLayer以添加新选项,如下所示:
from ipyleaflet import WMSLayer
from traitlets import Bool
class WMSLayerCustom (WMSLayer):
# Additional options
logscale = Bool(True).tag(sync=True, o=True)
Run Code Online (Sandbox Code Playgroud)
然后,而不是使用ipyleaflet.WMSLayer,您使用您的子类WMSLayerCustom:
wms = WMSLayerCustom(url=wms_url, layers=wms_layers[0], transparent=True,
format='image/png', opacity=0.33, logscale=True)
Run Code Online (Sandbox Code Playgroud)
生成的 url 将包含:
...&version=1.1.1&logscale=true&width=256&...
Run Code Online (Sandbox Code Playgroud)
该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'])
Run Code Online (Sandbox Code Playgroud)
您会得到一个 url和选项&layers=&...&transparent=false&...的默认值,从而忽略和在调用中。layertransparentlayers=wms_layers[0]transparent=TrueWMSLayer
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |