#!/usr/bin/env python # coding: utf-8 # In[1]: import os import folium print(folium.__version__) # In[2]: from folium.plugins import MarkerCluster m = folium.Map(location=[44, -73], zoom_start=5) marker_cluster = MarkerCluster().add_to(m) folium.Marker( location=[40.67, -73.94], popup='Add popup text here.', icon=folium.Icon(color='green', icon='ok-sign'), ).add_to(marker_cluster) folium.Marker( location=[44.67, -73.94], popup='Add popup text here.', icon=folium.Icon(color='red', icon='remove-sign'), ).add_to(marker_cluster) folium.Marker( location=[44.67, -71.94], popup='Add popup text here.', icon=None, ).add_to(marker_cluster) m.save(os.path.join('results', '1000_MarkerCluster0.html')) m # In[3]: import numpy as np size = 100 lons = np.random.randint(-180, 180, size=size) lats = np.random.randint(-90, 90, size=size) locations = list(zip(lats, lons)) popups = ['lon:{}
lat:{}'.format(lon, lat) for (lat, lon) in locations] # Adding all icons in a single call # In[4]: icon_create_function = """\ function(cluster) { return L.divIcon({ html: '' + cluster.getChildCount() + '', className: 'marker-cluster marker-cluster-large', iconSize: new L.Point(20, 20) }); }""" # In[5]: from folium.plugins import MarkerCluster m = folium.Map( location=[np.mean(lats), np.mean(lons)], tiles='Cartodb Positron', zoom_start=1 ) marker_cluster = MarkerCluster( locations=locations, popups=popups, name='1000 clustered icons', overlay=True, control=True, icon_create_function=icon_create_function ) marker_cluster.add_to(m) folium.LayerControl().add_to(m) m.save(os.path.join('results', '1000_MarkerCluster1.html')) m # Explicit loop allow for customization in the loop. # In[6]: get_ipython().run_cell_magic('time', '', "\nm = folium.Map(\n location=[np.mean(lats), np.mean(lons)],\n tiles='Cartodb Positron',\n zoom_start=1\n)\n\nmarker_cluster = MarkerCluster(\n name='1000 clustered icons',\n overlay=True,\n control=False,\n icon_create_function=None\n)\n\nfor k in range(size):\n location = lats[k], lons[k]\n marker = folium.Marker(location=location)\n popup = 'lon:{}
lat:{}'.format(location[1], location[0])\n folium.Popup(popup).add_to(marker)\n marker_cluster.add_child(marker)\n\nmarker_cluster.add_to(m)\n\nfolium.LayerControl().add_to(m)\n") # In[7]: m.save(os.path.join('results', '1000_MarkerCluster2.html')) m # `FastMarkerCluster` is not as flexible as MarkerCluster but, like the name suggests, it is faster. # In[8]: from folium.plugins import FastMarkerCluster # In[9]: get_ipython().run_cell_magic('time', '', "\n\nm = folium.Map(\n location=[np.mean(lats), np.mean(lons)],\n tiles='Cartodb Positron',\n zoom_start=1\n)\n\nFastMarkerCluster(data=list(zip(lats, lons))).add_to(m)\n\nfolium.LayerControl().add_to(m)\n") # In[10]: m.save(os.path.join('results', '1000_MarkerCluster3.html')) m # In[11]: callback = """\ function (row) { var icon, marker; icon = L.AwesomeMarkers.icon({ icon: "map-marker", markerColor: "red"}); marker = L.marker(new L.LatLng(row[0], row[1])); marker.setIcon(icon); return marker; }; """ m = folium.Map( location=[np.mean(lats), np.mean(lons)], tiles='Cartodb Positron', zoom_start=1 ) FastMarkerCluster( data=list(zip(lats, lons)), callback=callback ).add_to(m) m.save(os.path.join('results', '1000_MarkerCluster4.html')) m