import streamlit as st import folium import folium.plugins from streamlit_folium import st_folium import json # Set the map center and zoom level MAP_CENTER = [35.6895, 139.6917] # Tokyo ZOOM_LEVEL = 10 # Create a folium map object m = folium.Map(location=MAP_CENTER, zoom_start=ZOOM_LEVEL) # Create a DrawControl object dc = folium.plugins.Draw() # Set the draw options to allow only polygons and rectangles # dc.draw_options = { # "polyline": False, # "circle": False, # "circlemarker": False, # "marker": False, # } # Set the edit options to allow editing and deleting dc.edit_options = { "edit": True, "remove": True, } # Add the DrawControl object to the map m.add_child(dc) # Define a JavaScript function to handle the draw events draw_events = """ function handleDrawEvent(e) { // Get the type and layer of the drawn or edited feature var type = e.layerType; var layer = e.layer; // If the feature is a polygon or a rectangle, get its geojson data if (type === 'polygon' || type === 'rectangle') { var geojson = layer.toGeoJSON(); // Send the geojson data to Python via Streamlit streamlit.setComponentValue(geojson); } } """ # Add the JavaScript function to the HTML header of the map m.get_root().header.add_child(folium.Element(draw_events)) # Register the JavaScript function to the draw:created and draw:edited events m.add_child(folium.Element("map.on('draw:created', handleDrawEvent);")) m.add_child(folium.Element("map.on('draw:edited', handleDrawEvent);")) # Display the folium map using streamlit st_folium(m) # # Get the geojson data from Streamlit # geojson = st_folium.get_value() # # Display the geojson data using streamlit # st.write(geojson)