如何在我的 Streamlit 选择中显示多个地图?

How do I display multiple maps within my Streamlit selection?

我正在学习如何使用 Streamlit,我想添加一个 side-selection,让用户 select 他们希望在 Folium 地图上显示哪个半径。到目前为止,我已经能够显示地图和 select 侧栏,但我不知道如何将各种半径 select 离子映射到我的 folium 地图。

add_select = st.sidebar.selectbox("What radius do you want to assign?",
                                  ("1 mile", "2 miles","3 miles"))

#Map code

lat= 51.64270
lon = -0.20747
map_fs = folium.Map(location=[lat, lon], zoom_start=11.2)

df.apply(lambda row:folium.Circle(location=[row["longitude"], row["latitude"]], 
                                              radius=4828, Popup=row['cook'])
                                             .add_to(map_fs), axis=1)

df.apply(lambda row: folium.Marker(location=[row["longitude"], row["latitude"]],
    popup=row['C1'],
    icon=folium.Icon(color='red', icon='Default', prefix = 'fa'),
).add_to(map_fs), axis = 1)

folium_static(map_fs)

本质上,我想要的是一种在

中引用'radius'选项的方法

folium.Circle

我的 st.sidebar.selection 选项的方法。有人可以给我指出正确的方向吗?

我想我写了某种 if 语句,将 x 米映射到英里 selected 但我不确定。

您的选择以英里为单位,您需要将其转换为米,因为半径以米为单位。这是示例代码和结果。

代码

import streamlit as st
from streamlit_folium import folium_static
import folium


if "radius" not in st.session_state:
    st.session_state.radius = "0.1 mile"


def miles_to_meters(miles):
    return miles*1609


data = {
    "0.1 mile": 0.1,
    "1 mile": 1,
    "2 miles": 2,
    "3 miles": 3
}

st.sidebar.selectbox(
    label="What radius do you want to assign?",
    options=("0.1 mile", "1 mile", "2 miles", "3 miles"),
    key="radius"
)

radius = miles_to_meters(data[st.session_state.radius])

lat, lon = 51.64270, -0.20747
m = folium.Map(location=[lat, lon], zoom_start=16)
folium.Marker([lat, lon]).add_to(m)
folium.Circle([lat, lon], radius=radius).add_to(m)  # radius is in meters

folium_static(m)

输出