如何在我的 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)
输出
我正在学习如何使用 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)