import streamlit as st from bokeh.models.widgets import Button from bokeh.models import CustomJS from streamlit_bokeh_events import streamlit_bokeh_events import leafmap.foliumap as leafmap def app(): loc_button = Button(label="Get Device Location", max_width=150) loc_button.js_on_event( "button_click", CustomJS( code=""" navigator.geolocation.getCurrentPosition( (loc) => { document.dispatchEvent(new CustomEvent("GET_LOCATION", {detail: {lat: loc.coords.latitude, lon: loc.coords.longitude}})) } ) """ ), ) result = streamlit_bokeh_events( loc_button, events="GET_LOCATION", key="get_location", refresh_on_update=False, override_height=75, debounce_time=0, ) if result: if "GET_LOCATION" in result: loc = result.get("GET_LOCATION") lat = loc.get("lat") lon = loc.get("lon") st.write(f"Lat, Lon: {lat}, {lon}") m = leafmap.Map(center=(lat, lon), zoom=16) m.add_basemap("ROADMAP") popup = f"lat, lon: {lat}, {lon}" m.add_marker(location=(lat, lon), popup=popup) m.to_streamlit()