#!/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