Как установить дополнительные параметры для слоя WMS в ipyleaflet? - PullRequest
0 голосов
/ 01 февраля 2019

Я могу получить и установить 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

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете создать подкласс 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'])

Вы получаете URL с &layers=&...&transparent=false&...которые являются параметрами по умолчанию для параметров layer и transparent, таким образом игнорируя layers=wms_layers[0] и transparent=True при вызове WMSLayer.

...