Skip to content

Commit 57e40cf

Browse files
author
Lo Conti Francesco
committed
Add SideBySide plugin
1 parent e9b9b47 commit 57e40cf

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

folium/plugins/side_by_side.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from branca.element import CssLink, Figure, JavascriptLink
4+
5+
from folium.map import Layer
6+
7+
from jinja2 import Template
8+
9+
10+
class SideBySideLayers(Layer):
11+
"""
12+
Creates a SideBySideLayers that takes two Layers and adds a sliding
13+
control with the leaflet-side-by-side plugin.
14+
Parameters
15+
----------
16+
layer_left: Layer.
17+
The left Layer within the side by side control.
18+
Must be created and added to the map before being passed to this class.
19+
layer_right: Layer.
20+
The left Layer within the side by side control.
21+
Must be created and added to the map before being passed to this class.
22+
name : string, default None
23+
The name of the Layer, as it will appear in LayerControls.
24+
overlay : bool, default True
25+
Adds the layer as an optional overlay (True) or the base layer (False).
26+
control : bool, default True
27+
Whether the Layer will be included in LayerControls.
28+
show: bool, default True
29+
Whether the layer will be shown on opening (only for overlays).
30+
Examples
31+
--------
32+
>>> layer_left = WmsTileLayer(
33+
... 'http://this.wms.server/ncWMS/wms',
34+
... name='Test WMS Data',
35+
... styles='',
36+
... fmt='image/png',
37+
... transparent=True,
38+
... layers='test_data',
39+
... COLORSCALERANGE='0,10',
40+
...)
41+
>>> layer_left.add_to(m)
42+
>>> layer_right = WmsTileLayer(
43+
... 'http://this.wms.server/ncWMS/wms',
44+
... name='Test WMS Data',
45+
... styles='',
46+
... fmt='image/png',
47+
... transparent=True,
48+
... layers='test_data_2',
49+
... COLORSCALERANGE='0,5',
50+
...)
51+
>>> layer_right.add_to(m)
52+
>>> # Add layers to sidebyside control.
53+
>>> sidebyside = SideBySideLayers(layer_left, layer_right)
54+
>>> sidebyside.add_to(m)
55+
See https://github.com/digidem/leaflet-side-by-side for more information.
56+
"""
57+
58+
_template = Template(u"""
59+
{% macro script(this, kwargs) %}
60+
var {{ this.get_name() }} = L.control.sideBySide(
61+
{{ this.layer_left.get_name() }}, {{ this.layer_right.get_name() }}
62+
).addTo({{ this._parent.get_name() }});
63+
{% endmacro %}
64+
""")
65+
66+
def __init__(self, layer_left, layer_right, name=None, overlay=True, control=True, show=True):
67+
super(SideBySideLayers, self).__init__(name=name,
68+
overlay=overlay,
69+
control=control,
70+
show=show)
71+
self._name = 'SideBySideLayers'
72+
self.layer_left = layer_left
73+
self.layer_right = layer_right
74+
75+
def render(self, **kwargs):
76+
super(SideBySideLayers, self).render()
77+
78+
figure = self.get_root()
79+
assert isinstance(figure, Figure), ('You cannot render this Element '
80+
'if it is not in a Figure.')
81+
82+
figure.header.add_child(
83+
JavascriptLink('http://lab.digital-democracy.org/leaflet-side-by-side/leaflet-side-by-side.js'), # noqa
84+
name='leaflet.sidebyside')

0 commit comments

Comments
 (0)