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