testgee / app.py
zheng.tang
添加 folium.plugins和streamlit_folium
0689b5c
raw
history blame
No virus
1.75 kB
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)