#!/usr/bin/env python # coding: utf-8 # In[1]: import folium 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 # In[2]: 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[3]: icon_create_function = """\ function(cluster) { return L.divIcon({ html: '' + cluster.getChildCount() + '', className: 'marker-cluster marker-cluster-large', iconSize: new L.Point(20, 20) }); }""" # In[4]: 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 # Explicit loop allow for customization in the loop. # In[5]: 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[6]: m # `FastMarkerCluster` is not as flexible as MarkerCluster but, like the name suggests, it is faster. # In[7]: from folium.plugins import FastMarkerCluster # In[8]: 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[9]: m # In[10]: 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