1414 TypeJsonValue ,
1515 camelize ,
1616 escape_backticks ,
17+ get_and_assert_figure_root ,
1718 parse_options ,
1819 validate_location ,
1920)
@@ -33,7 +34,7 @@ class Layer(MacroElement):
3334 control : bool, default True
3435 Whether the Layer will be included in LayerControls.
3536 show: bool, default True
36- Whether the layer will be shown on opening (only for overlays) .
37+ Whether the layer will be shown on opening.
3738 """
3839
3940 def __init__ (
@@ -49,6 +50,26 @@ def __init__(
4950 self .control = control
5051 self .show = show
5152
53+ def render (self , ** kwargs ):
54+ super ().render (** kwargs )
55+ if self .show :
56+ self ._add_layer_to_map ()
57+
58+ def _add_layer_to_map (self , ** kwargs ):
59+ """Show the layer on the map by adding it to its parent in JS."""
60+ template = Template (
61+ """
62+ {%- macro script(this, kwargs) %}
63+ {{ this.get_name() }}.addTo({{ this._parent.get_name() }});
64+ {%- endmacro %}
65+ """
66+ )
67+ script = template .module .__dict__ ["script" ]
68+ figure = get_and_assert_figure_root (self )
69+ figure .script .add_child (
70+ Element (script (self , kwargs )), name = self .get_name () + "_add"
71+ )
72+
5273
5374class FeatureGroup (Layer ):
5475 """
@@ -68,7 +89,7 @@ class FeatureGroup(Layer):
6889 control: bool, default True
6990 Whether the layer will be included in LayerControls.
7091 show: bool, default True
71- Whether the layer will be shown on opening (only for overlays) .
92+ Whether the layer will be shown on opening.
7293 **kwargs
7394 Additional (possibly inherited) options. See
7495 https://leafletjs.com/reference.html#featuregroup
@@ -80,7 +101,7 @@ class FeatureGroup(Layer):
80101 {% macro script(this, kwargs) %}
81102 var {{ this.get_name() }} = L.featureGroup(
82103 {{ this.options|tojson }}
83- ).addTo({{ this._parent.get_name() }}) ;
104+ );
84105 {% endmacro %}
85106 """
86107 )
@@ -150,10 +171,6 @@ class LayerControl(MacroElement):
150171 {{ this.options|tojson }}
151172 ).addTo({{this._parent.get_name()}});
152173
153- {%- for val in this.layers_untoggle.values() %}
154- {{ val }}.remove();
155- {%- endfor %}
156-
157174 {% endmacro %}
158175 """
159176 )
@@ -172,12 +189,10 @@ def __init__(
172189 )
173190 self .base_layers : OrderedDict [str , str ] = OrderedDict ()
174191 self .overlays : OrderedDict [str , str ] = OrderedDict ()
175- self .layers_untoggle : OrderedDict [str , str ] = OrderedDict ()
176192
177193 def reset (self ) -> None :
178194 self .base_layers = OrderedDict ()
179195 self .overlays = OrderedDict ()
180- self .layers_untoggle = OrderedDict ()
181196
182197 def render (self , ** kwargs ) -> None :
183198 """Renders the HTML representation of the element."""
@@ -188,12 +203,8 @@ def render(self, **kwargs) -> None:
188203 key = item .layer_name
189204 if not item .overlay :
190205 self .base_layers [key ] = item .get_name ()
191- if len (self .base_layers ) > 1 :
192- self .layers_untoggle [key ] = item .get_name ()
193206 else :
194207 self .overlays [key ] = item .get_name ()
195- if not item .show :
196- self .layers_untoggle [key ] = item .get_name ()
197208 super ().render ()
198209
199210
0 commit comments