#!/usr/bin/env python # coding: utf-8 # # Examples of plugins usage in folium # In[1]: import os import numpy as np import folium from folium import plugins print(folium.__version__) # In this notebook we show a few illustrations of folium's plugin extensions. These are available after importing `folium.plugins`. # ## ScrollZoomToggler # Adds a button to enable/disable zoom scrolling. # In[2]: m = folium.Map([45, 3], zoom_start=4) plugins.ScrollZoomToggler().add_to(m) m.save(os.path.join('results', 'Plugins_0.html')) m # ## MarkerCluster # Adds a MarkerCluster layer on the map. # In[3]: N = 100 data = np.array( [ np.random.uniform(low=35, high=60, size=N), # Random latitudes in Europe. np.random.uniform(low=-12, high=30, size=N), # Random longitudes in Europe. ] ).T popups = [str(i) for i in range(N)] # Popups texts are simple numbers. m = folium.Map([45, 3], zoom_start=4) plugins.MarkerCluster(data, popups=popups).add_to(m) m.save(os.path.join('results', 'Plugins_1.html')) m # ## Terminator # In[4]: m = folium.Map([45, 3], zoom_start=1) plugins.Terminator().add_to(m) m.save(os.path.join('results', 'Plugins_2.html')) m # ## BoatMarker # In[5]: m = folium.Map([30, 0], zoom_start=3) plugins.BoatMarker( location=(34, -43), heading=45, wind_heading=150, wind_speed=45, color='#8f8' ).add_to(m) plugins.BoatMarker( location=(46, -30), heading=-20, wind_heading=46, wind_speed=25, color='#88f' ).add_to(m) m.save(os.path.join('results', 'Plugins_3.html')) m # ## BeautifyIcon # In[6]: m = folium.Map([45.5, -122], zoom_start=3) icon_plane = plugins.BeautifyIcon( icon='plane', border_color='#b3334f', text_color='#b3334f', icon_shape='triangle') icon_number = plugins.BeautifyIcon( border_color='#00ABDC', text_color='#00ABDC', number=10, inner_icon_style='margin-top:0;') folium.Marker( location=[46, -122], popup='Portland, OR', icon=icon_plane ).add_to(m) folium.Marker( location=[50, -122], popup='Portland, OR', icon=icon_number ).add_to(m) m.save(os.path.join('results', 'Plugins_4.html')) m # ## Fullscreen # In[7]: m = folium.Map(location=[41.9, -97.3], zoom_start=4) plugins.Fullscreen( position='topright', title='Expand me', title_cancel='Exit me', force_separate_button=True ).add_to(m) m.save(os.path.join('results', 'Plugins_5.html')) m # ## Timestamped GeoJSON # In[8]: m = folium.Map( location=[35.68159659061569, 139.76451516151428], zoom_start=16 ) # Lon, Lat order. lines = [ { 'coordinates': [ [139.76451516151428, 35.68159659061569], [139.75964426994324, 35.682590062684206], ], 'dates': [ '2017-06-02T00:00:00', '2017-06-02T00:10:00' ], 'color': 'red' }, { 'coordinates': [ [139.75964426994324, 35.682590062684206], [139.7575843334198, 35.679505030038506], ], 'dates': [ '2017-06-02T00:10:00', '2017-06-02T00:20:00' ], 'color': 'blue' }, { 'coordinates': [ [139.7575843334198, 35.679505030038506], [139.76337790489197, 35.678040905014065], ], 'dates': [ '2017-06-02T00:20:00', '2017-06-02T00:30:00' ], 'color': 'green', 'weight': 15, }, { 'coordinates': [ [139.76337790489197, 35.678040905014065], [139.76451516151428, 35.68159659061569], ], 'dates': [ '2017-06-02T00:30:00', '2017-06-02T00:40:00' ], 'color': '#FFFFFF', }, ] features = [ { 'type': 'Feature', 'geometry': { 'type': 'LineString', 'coordinates': line['coordinates'], }, 'properties': { 'times': line['dates'], 'style': { 'color': line['color'], 'weight': line['weight'] if 'weight' in line else 5 } } } for line in lines ] plugins.TimestampedGeoJson({ 'type': 'FeatureCollection', 'features': features, }, period='PT1M', add_last_point=True).add_to(m) m.save(os.path.join('results', 'Plugins_6.html')) m # In[9]: table = """\
Firstname Lastname Age
Jill Smith 50
Eve Jackson 94
""" points = [ { 'time': '2017-06-02', 'popup': '

address1

', 'coordinates': [-2.548828, 51.467697] }, { 'time': '2017-07-02', 'popup': '

address2

', 'coordinates': [-0.087891, 51.536086] }, { 'time': '2017-08-02', 'popup': '

address3

', 'coordinates': [-6.240234, 53.383328] }, { 'time': '2017-09-02', 'popup': '

address4

', 'coordinates': [-1.40625, 60.261617]}, { 'time': '2017-10-02', 'popup': table, 'coordinates': [-1.516113, 53.800651]} ] features = [ { 'type': 'Feature', 'geometry': { 'type': 'Point', 'coordinates': point['coordinates'], }, 'properties': { 'time': point['time'], 'popup': point['popup'], 'id': 'house', 'icon': 'marker', 'iconstyle': { 'iconUrl': 'http://downloadicons.net/sites/default/files/small-house-with-a-chimney-icon-70053.png', 'iconSize': [20, 20] } } } for point in points ] features.append( { 'type': 'Feature', 'geometry': { 'type': 'LineString', 'coordinates': [ [-2.548828, 51.467697], [-0.087891, 51.536086], [-6.240234, 53.383328], [-1.40625, 60.261617], [-1.516113, 53.800651] ], }, 'properties': { 'popup': 'Current address', 'times': [ '2017-06-02', '2017-07-02', '2017-08-02', '2017-09-02', '2017-10-02' ], 'icon': 'circle', 'iconstyle': { 'fillColor': 'green', 'fillOpacity': 0.6, 'stroke': 'false', 'radius': 13 }, 'style': {'weight': 0}, 'id': 'man' } } ) m = folium.Map( location=[56.096555, -3.64746], tiles='cartodbpositron', zoom_start=5, ) plugins.TimestampedGeoJson( { 'type': 'FeatureCollection', 'features': features }, period='P1M', add_last_point=True, auto_play=False, loop=False, max_speed=1, loop_button=True, date_options='YYYY/MM/DD', time_slider_drag_update=True, duration='P2M' ).add_to(m) m.save(os.path.join('results', 'Plugins_7.html')) m # ## FeatureGroupSubGroup # # ### Sub categories # # Disable all markers in the category, or just one of the subgroup. # In[10]: m = folium.Map(location=[0, 0], zoom_start=6) fg = folium.FeatureGroup(name='groups') m.add_child(fg) g1 = plugins.FeatureGroupSubGroup(fg, 'group1') m.add_child(g1) g2 = plugins.FeatureGroupSubGroup(fg, 'group2') m.add_child(g2) folium.Marker([-1, -1]).add_to(g1) folium.Marker([1, 1]).add_to(g1) folium.Marker([-1, 1]).add_to(g2) folium.Marker([1, -1]).add_to(g2) folium.LayerControl(collapsed=False).add_to(m) m.save(os.path.join('results', 'Plugins_8.html')) m # ### Marker clusters across groups # # Create two subgroups, but cluster markers together. # In[11]: m = folium.Map(location=[0, 0], zoom_start=6) mcg = folium.plugins.MarkerCluster(control=False) m.add_child(mcg) g1 = folium.plugins.FeatureGroupSubGroup(mcg, 'group1') m.add_child(g1) g2 = folium.plugins.FeatureGroupSubGroup(mcg, 'group2') m.add_child(g2) folium.Marker([-1, -1]).add_to(g1) folium.Marker([1, 1]).add_to(g1) folium.Marker([-1, 1]).add_to(g2) folium.Marker([1, -1]).add_to(g2) folium.LayerControl(collapsed=False).add_to(m) m.save(os.path.join('results', 'Plugins_9.html')) m # ## Minimap # # Adds a locator minimap to a folium document. # In[12]: m = folium.Map(location=(30, 20), zoom_start=4) minimap = plugins.MiniMap() m.add_child(minimap) m.save(os.path.join('results', 'Plugins_10.html')) m # ## DualMap # The DualMap plugin can be used to display two maps side by side, where panning and zooming is syncronized. # # The `DualMap` class can be used just like the normal `Map` class. The two sub-maps can be accessed with its `m1` and `m2` attributes. # In[13]: m = plugins.DualMap(location=(52.1, 5.1), tiles=None, zoom_start=8) folium.TileLayer('cartodbpositron').add_to(m.m2) folium.TileLayer('openstreetmap').add_to(m) fg_both = folium.FeatureGroup(name='markers_both').add_to(m) fg_1 = folium.FeatureGroup(name='markers_1').add_to(m.m1) fg_2 = folium.FeatureGroup(name='markers_2').add_to(m.m2) icon_red = folium.Icon(color='red') folium.Marker((52, 5), tooltip='both', icon=icon_red).add_to(fg_both) folium.Marker((52.4, 5), tooltip='left').add_to(fg_1) folium.Marker((52, 5.4), tooltip='right').add_to(fg_2) folium.LayerControl(collapsed=False).add_to(m) m.save(os.path.join('results', 'Plugins_11.html')) m # ## Locate control # # Adds a control button that when clicked, the user device geolocation is displayed. # # To work properly in production, the connection needs to be encrypted, otherwise browser will not # allow users to share their location. # In[14]: m = folium.Map([41.97,2.81]) plugins.LocateControl().add_to(m) # If used with Draw plugin, LocateControl needs to be added before it. # Draw().add_to(m) m