Peter Hoffmann

Beautiful Leaflet Markers with Folium and Font Awesome

Folium is a Python library that creates and displays interactive maps using the Leaflet.js library. It can render powerful and visually appealing maps with markers, polygons, heatmaps, and other geographic elements. Folium is easy to use and offers many options for customizing maps and displayed elements.

Minimal marker

The minimal example just adds a marker at a specific location:

import folium
loc = [45.957916666667, 7.8123888888889]

m = folium.Map(location=loc, zoom_start=13)

folium.Marker(
    location=loc
).add_to(m)
m

Marker with a Bootstrap icon

Markers can be customized by providing an Icon instance. By default, you can use Bootstrap Glyphicons, which provide over 250 glyphs for free:

Additionally, you can color the marker. Available color names are red blue green purple orange darkred lightred beige darkblue darkgreen cadetblue darkpurple white pink lightblue lightgreen gray black lightgray.

m = folium.Map(location=loc)

folium.Marker(
    location=loc,
    icon=folium.Icon(icon="home",
                     color="purple",
                     icon_color="blue")
).add_to(m)

Marker with a Font Awesome icon

Font Awesome is a collection of scalable vector icons that can be customized and used in many ways, such as in design projects, websites, and applications. The icons are available in different styles (Solid, Regular, and Brands) and can be integrated by adding the fa prefix.

m = folium.Map(location=loc)
folium.Marker(
    location=loc,
    icon=folium.Icon(icon="tents", prefix='fa')
).add_to(m)

Extended marker customization with BeautifyIcon

The Leaflet Beautify Marker plugin is a lightweight plugin that adds colorful, iconic markers without images for Leaflet, giving full control of style to the end user (e.g., unlimited colors and more).

It is exposed to Folium via the BeautifyIcon plugin.

Supported icon shapes are circle circle-dot doughnut rectangle rectangle-dot marker, and the color can be either one of the predefined options or any valid hex code.

import folium.plugins as plugins

folium.Marker(
    location=loc,
    icon=plugins.BeautifyIcon(
                     icon="tent",
                     icon_shape="circle",
                     border_color='purple',
                     text_color="#007799",
                     background_color='yellow'
                 )
).add_to(m)

Custom markers with a DivIcon

If you want to add more textual information, you can use plain HTML with a DivIcon. A DivIcon represents a lightweight icon for markers that uses a simple div element instead of an image.

from folium.features import DivIcon

html = '''
<span style="font-size: 10px; background-color: lightblue;">
<i class="fa-solid fa-tents"></i>
Monte Rosa Hut
</span>
'''

folium.Marker(location=loc,
              icon=DivIcon(
                  icon_size=(100,20),
                  icon_anchor=(5,5),
                  html=html)
             ).add_to(m)