import streamlit as st import pandas as pd import folium import numpy as np from streamlit_folium import folium_static # Load data data = { 'Name': ['Location_A', 'Location_B', 'Location_C', 'Location_D', 'Location_E', 'Location_A', 'Location_B', 'Location_C', 'Location_D', 'Location_E', 'Location_A', 'Location_B', 'Location_C', 'Location_D', 'Location_E', 'Location_A', 'Location_B', 'Location_C', 'Location_D', 'Location_E', 'Location_A', 'Location_B', 'Location_C', 'Location_D', 'Location_E', ], 'latitude': np.random.uniform(40.7, 40.8, size=25), # Assuming latitude range between 40.7 and 40.8 'longitude': np.random.uniform(-74.0, -73.9, size=25) # Assuming longitude range between -74.0 and -73.9 } # Create DataFrame df = pd.DataFrame(data) # Sidebar for user input st.sidebar.title('Filters') selected_column = st.sidebar.selectbox('Select Column', df.columns) # Filter data based on user selection filtered_data = pd.DataFrame(data) # Display the filtered data st.write('Filtered Data:') st.write(filtered_data) # Create a map object m = folium.Map(location=(filtered_data['latitude'].mean(), filtered_data['longitude'].mean()), zoom_start=10) # Add markers to the map all_markers = folium.FeatureGroup(name='All Markers') active_markers = folium.FeatureGroup(name='Active Markers', show=False) inactive_markers = folium.FeatureGroup(name='Inactive Markers', show=False) for index, row in filtered_data.iterrows(): status_color = 'green' if index%2==0 else 'red' html_content = f"""
{index}
""" # Create a DivIcon with custom HTML content icon = folium.DivIcon(html=html_content) marker = folium.Marker([row['latitude'], row['longitude']], popup=row['Name'], icon=icon).add_to(m) # #add to groups # marker.add_to(all_markers) # if index%2==0: # marker.add_to(active_markers) # else: # marker.add_to(inactive_markers) # # Add layers to the map # all_markers.add_to(m) # active_markers.add_to(m) # inactive_markers.add_to(m) # Add layer control to toggle marker visibility folium.LayerControl().add_to(m) polygon_coords = [ [np.random.uniform(40.7, 40.8, size=6)[i], np.random.uniform(-74.0, -73.9, size=6)[i]] for i in range(6)] # Create a polygon object polygon = folium.Polygon(locations=polygon_coords, color='blue', fill=True, fill_color='blue', fill_opacity=0.3) # Add the tag to the polygon popup_text = "This is my polygon" popup = folium.Popup(popup_text, parse_html=True) polygon.add_child(popup) # Add the polygon to the map m.add_child(polygon) # Render the map folium_static(m)