鼠标单击时从 folium 地图返回纬度、经度值到 python 脚本(streamlit webapp)

问题描述 投票:0回答:4

我正在编写一个网络应用程序,用户单击地图,纬度、经度将返回到 python 脚本。网络应用程序是在streamlit上编写的,对于地图我使用folium。目前,我使用 folium.LatLngPopup() 来获取单击位置的点击经纬度,但我很困惑如何检索 python 脚本中的值以进行进一步处理。

这是目前的样子:

#代码片段

import streamlit as st
from streamlit_folium import folium_static
import folium
m = folium.Map()
m.add_child(folium.LatLngPopup())
folium_static(m)

可能没有本地解决方案,但任何解决方法将不胜感激!

python web-applications onclick folium streamlit
4个回答
4
投票

如果您可以直接使用该值而不是对其进行赋值,则可以仅使用

map['last_clicked']['lat']
map['last_clicked']['lng']
(其中
map
已定义)。例如,在这里我只打印每个位置的纬度/经度,但不只是返回它们,在函数中您可以执行任何您需要的操作:

import folium as fl
from streamlit_folium import st_folium
import streamlit as st

def get_pos(lat,lng):
    return lat,lng

m = fl.Map()

m.add_child(fl.LatLngPopup())

map = st_folium(m, height=350, width=700)


data = get_pos(map['last_clicked']['lat'],map['last_clicked']['lng'])

if data is not None:
    st.write(data)

0
投票

我最近遇到了同样的问题,获取纬度和经度,然后打印它或将值保存到变量中。显然,我发现通常的streamlit是静态的,因为我尝试创建一个streamlit.button,如果单击该按钮,应该将1添加到变量计数器。结果:无论我点击了多少次,变量计数器都打印为 1。

为了能够接受输入,streamlit 组件应该是“双向”的。 我可能无法清楚地解释它,因为我在 python 或 javascript 中仍然是新手,但简而言之,它应该监听值的变化。 解决方案是创建双向组件,后来我发现了这个很棒的存储库

streamlit-light-leaflet

。要运行它,只需按照 README.md 进行操作即可。假设您已经在虚拟环境中安装了streamlit,请执行npm install

npm run start
。然后在不同的终端/命令行中运行“
streamlit run file.py
”。单击运行 Streamlit 的终端中的 URL。
如果地图未显示,请前往

my_component/frontend/src/index.tsx

并输入您的mapbox.com accessToken。要获取 accessToken,您应该首先注册 mapbox.com。最佳实践是使用

.env
并从那里调用您的 Mapbox accessToken,以保持代码简洁。
    


0
投票

# my_app.py import folium as fl from streamlit_folium import st_folium import streamlit as st def get_pos(lat, lng): return lat, lng m = fl.Map() m.add_child(fl.LatLngPopup()) map = st_folium(m, height=350, width=700) data = None if map.get("last_clicked"): data = get_pos(map["last_clicked"]["lat"], map["last_clicked"]["lng"]) if data is not None: st.write(data) # Writes to the app print(data) # Writes to terminal

运行它:

streamlit run my_app.py



0
投票

© www.soinside.com 2019 - 2024. All rights reserved.