Search code examples
pythonfolium

How to superimpose labels/locations in Folium?


How can I superimpose all these locations on a map?

Is there a way that I could also shorten the codes so I don't have to repeat each step for each location?

Here are what I have for 5 locations and I would like to have them all in one map.

NASA_coordinate = [29.559684888503615, -95.0830971930759]
CCAFS_LC_coordinate = [28.562302, -80.577356]
CCAFS_SLC_coordinate = [28.563197, -80.576820]
KSC_LC_coordinate = [28.573255, -80.646895]
VAFB_SLC_coordinate = [34.632834, -120.610745]


NASA_map = folium.Map(location=NASA_coordinate, zoom_start=5)
CCAFS_LC_map = folium.Map(location=CCAFS_LC_coordinate, zoom_start=5)
CCAFS_SLC_map = folium.Map(location=CCAFS_SLC_coordinate, zoom_start=5)
KSC_LC_map = folium.Map(location=KSC_LC_coordinate, zoom_start=5)
VAFB_SLC_map = folium.Map(location=VAFB_SLC_coordinate, zoom_start=5)


NASA_circle = folium.Circle(NASA_coordinate, radius=1000, color='#d35400', fill=True).add_child(folium.Popup('NASA Johnson Space Center'))
NASA_marker = folium.map.Marker(NASA_coordinate, icon=DivIcon(icon_size=(20,20), icon_anchor=(0,0), html='<div style="font-size: 12; color:#d35400;"><b>%s</b></div>' % 'NASA JSC'))
NASA_map.add_child(NASA_circle)
NASA_map.add_child(NASA_marker)


CCAFS_LC_circle = folium.Circle(CCAFS_LC_coordinate, radius=1000, color='#d35400', fill=True).add_child(folium.Popup('CCAFS LC-40'))
CCAFS_LC_marker = folium.map.Marker(CCAFS_LC_coordinate, icon=DivIcon(icon_size=(20,20), icon_anchor=(0,0), html='<div style="font-size: 12; color:#d35400;"><b>%s</b></div>' % 'CCAFS LC-40'))
CCAFS_LC_map.add_child(CCAFS_LC_circle)
CCAFS_LC_map.add_child(CCAFS_LC_marker)


CCAFS_SLC_circle = folium.Circle(CCAFS_SLC_coordinate, radius=1000, color='#d35400', fill=True).add_child(folium.Popup('CCAFS SLC-40'))
CCAFS_SLC_marker = folium.map.Marker(CCAFS_SLC_coordinate, icon=DivIcon(icon_size=(20,20), icon_anchor=(0,0), html='<div style="font-size: 12; color:#d35400;"><b>%s</b></div>' % 'CCAFS SLC-40'))
CCAFS_SLC_map.add_child(CCAFS_SLC_circle)
CCAFS_SLC_map.add_child(CCAFS_SLC_marker)


KSC_LC_circle = folium.Circle(KSC_LC_coordinate, radius=1000, color='#d35400', fill=True).add_child(folium.Popup('KSC LC-39A'))
KSC_LC_marker = folium.map.Marker(KSC_LC_coordinate, icon=DivIcon(icon_size=(20,20), icon_anchor=(0,0), html='<div style="font-size: 12; color:#d35400;"><b>%s</b></div>' % 'KSC LC-39A'))
KSC_LC_map.add_child(KSC_LC_circle)
KSC_LC_map.add_child(KSC_LC_marker)


VAFB_SLC_circle = folium.Circle(VAFB_SLC_coordinate, radius=1000, color='#d35400', fill=True).add_child(folium.Popup('VAFB SLC-4E'))
VAFB_SLC_marker = folium.map.Marker(VAFB_SLC_coordinate, icon=DivIcon(icon_size=(20,20), icon_anchor=(0,0), html='<div style="font-size: 12; color:#d35400;"><b>%s</b></div>' % 'VAFB SLC-4E'))
VAFB_SLC_map.add_child(VAFB_SLC_circle)
VAFB_SLC_map.add_child(VAFB_SLC_marker)

Solution

  • import folium
    from folium.features import DivIcon
    import pandas as pd
    
    NASA_coordinate = [29.559684888503615, -95.0830971930759]
    CCAFS_LC_coordinate = [28.562302, -80.577356]
    CCAFS_SLC_coordinate = [28.563197, -80.576820]
    KSC_LC_coordinate = [28.573255, -80.646895]
    VAFB_SLC_coordinate = [34.632834, -120.610745]
    
    df = pd.DataFrame({'name': ['NASA','CCAFS_LC','CCAFS_SLC','KSC_LC','VAFB_SLC'],
                       'lon': [NASA_coordinate[0],CCAFS_LC_coordinate[0],CCAFS_SLC_coordinate[0],KSC_LC_coordinate[0],VAFB_SLC_coordinate[0]],
                       'lat': [NASA_coordinate[1],CCAFS_LC_coordinate[1],CCAFS_SLC_coordinate[1],KSC_LC_coordinate[1],VAFB_SLC_coordinate[1]],
                      })
    
    m = folium.Map(location=[df['lon'].mean(), df['lat'].mean()], zoom_start=4)
    
    for row in df.itertuples():
        folium.Marker(
            location=[row.lon, row.lat],
            popup=folium.Popup(row.name),
            icon=DivIcon(
                icon_size=(20,20),
                icon_anchor=(0,0),
                html='<div style="font-size: 12; color:#d35400;"><b>%s</b></div>' % row.name),
        ).add_to(m)
        folium.Circle([row.lon, row.lat],
                      radius=1000,
                      color='#d35400', fill=True).add_to(m)
    m
    

    enter image description here