# MarkerCluster ```{code-cell} ipython3 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 ``` ```{code-cell} ipython3 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 ```{code-cell} ipython3 icon_create_function = """\ function(cluster) { return L.divIcon({ html: '' + cluster.getChildCount() + '', className: 'marker-cluster marker-cluster-large', iconSize: new L.Point(20, 20) }); }""" ``` ```{code-cell} ipython3 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 allows for customization in the loop. ```{code-cell} ipython3 m = folium.Map( location=[np.mean(lats), np.mean(lons)], tiles='Cartodb Positron', zoom_start=1 ) marker_cluster = MarkerCluster( name='1000 clustered icons', overlay=True, control=False, icon_create_function=None ) for k in range(size): location = lats[k], lons[k] marker = folium.Marker(location=location) popup = 'lon:{}
lat:{}'.format(location[1], location[0]) folium.Popup(popup).add_to(marker) marker_cluster.add_child(marker) marker_cluster.add_to(m) folium.LayerControl().add_to(m); m ``` ## FastMarkerCluster `FastMarkerCluster` is not as flexible as MarkerCluster but, like the name suggests, it is faster. ```{code-cell} ipython3 from folium.plugins import FastMarkerCluster m = folium.Map( location=[np.mean(lats), np.mean(lons)], tiles='Cartodb Positron', zoom_start=1 ) FastMarkerCluster(data=list(zip(lats, lons))).add_to(m) folium.LayerControl().add_to(m); m ``` ```{code-cell} ipython3 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 ```