Skip to content

Commit 7dd3fb8

Browse files
author
Martin Journois
committed
Fix test_layer
1 parent 8d5dd69 commit 7dd3fb8

2 files changed

Lines changed: 46 additions & 6 deletions

File tree

folium/map.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"""
88
import warnings
99
import json
10+
from collections import OrderedDict
1011

1112
from jinja2 import Template
1213

@@ -173,7 +174,7 @@ def add_tile_layer(self, tiles='OpenStreetMap', name=None,
173174

174175
class TileLayer(MacroElement):
175176
def __init__(self, tiles='OpenStreetMap', name=None,
176-
min_zoom=1, max_zoom=18, attr=None, API_key=None):
177+
min_zoom=1, max_zoom=18, attr=None, API_key=None, overlay = False):
177178
"""TODO docstring here
178179
Parameters
179180
----------
@@ -185,6 +186,8 @@ def __init__(self, tiles='OpenStreetMap', name=None,
185186
self.min_zoom = min_zoom
186187
self.max_zoom = max_zoom
187188

189+
self.overlay = overlay
190+
188191
self.tiles = ''.join(tiles.lower().strip().split())
189192
if self.tiles in ('cloudmade', 'mapbox') and not API_key:
190193
raise ValueError('You must pass an API key if using Cloudmade'
@@ -219,6 +222,42 @@ def __init__(self, tiles='OpenStreetMap', name=None,
219222
{% endmacro %}
220223
""")
221224

225+
class LayerControl(MacroElement):
226+
"""Adds a layer control to the map."""
227+
def __init__(self):
228+
"""Creates a LayerControl object to be added on a folium map.
229+
230+
Parameters
231+
----------
232+
"""
233+
super(LayerControl, self).__init__()
234+
self._name = 'LayerControl'
235+
236+
self.base_layers = OrderedDict()
237+
self.overlays = OrderedDict()
238+
239+
self._template = Template("""
240+
{% macro script(this,kwargs) %}
241+
var {{this.get_name()}} = {
242+
base_layers : { {% for key,val in this.base_layers.items() %}"{{key}}" : {{val}},{% endfor %} },
243+
overlays : { {% for key,val in this.overlays.items() %}"{{key}}" : {{val}},{% endfor %} }
244+
};
245+
L.control.layers(
246+
{{this.get_name()}}.base_layers,
247+
{{this.get_name()}}.overlays
248+
).addTo({{this._parent.get_name()}});
249+
{% endmacro %}
250+
""")
251+
252+
def render(self, **kwargs):
253+
"""TODO : docstring here."""
254+
self.base_layers = OrderedDict([(val.tile_name,val.get_name()) \
255+
for key,val in self._parent._children.items() if isinstance(val,TileLayer) and not val.overlay])
256+
self.overlays = OrderedDict([(val.tile_name,val.get_name()) \
257+
for key,val in self._parent._children.items() if isinstance(val,TileLayer) and val.overlay])
258+
259+
super(LayerControl, self).render()
260+
222261
class Icon(MacroElement):
223262
def __init__(self, color='blue', icon='info-sign', angle=0):
224263
"""TODO : docstring here"""

tests/test_plugins.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,12 @@ def test_boat_marker(self):
5252
mapa._repr_html_()
5353

5454
def test_layer(self):
55-
mapa = folium.Map([48., 5.], zoom_start=6)
56-
layer = '//otile1.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png'
57-
mapa.add_plugin(plugins.Layer(layer, layer_name='MapQuest'))
58-
mapa.add_plugin(plugins.LayerControl())
59-
mapa._build_map()
55+
mapa = folium.Map([48., 5.], tiles='stamentoner', zoom_start=6)
56+
layer = 'http://otile1.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.png'
57+
mapa.add_children(folium.map.TileLayer(layer, name='MapQuest', attr='attribution'))
58+
mapa.add_children(folium.map.TileLayer(layer, name='MapQuest2', attr='attribution2', overlay=True))
59+
mapa.add_children(folium.map.LayerControl())
60+
mapa._repr_html_()
6061

6162
def test_geo_json(self):
6263
N = 100

0 commit comments

Comments
 (0)