import streamlit as st import json import matplotlib.pyplot as plt # Set Streamlit page configuration st.set_page_config(layout="wide") # Function to load JSON data def load_data(filename): with open(filename, 'r') as file: data = json.load(file) return data # Dictionary for color codes color_codes = { "residential": "#ADD8E6", "commercial": "#90EE90", "community_facilities": "#FFFF00", "school": "#FFFF00", "healthcare_facility": "#FFFF00", "green_space": "#90EE90", "utility_infrastructure": "#90EE90", "emergency_services": "#FF0000", "cultural_facilities": "#D8BFD8", "recreational_facilities": "#D8BFD8", "innovation_center": "#90EE90", "elderly_care_home": "#FFFF00", "childcare_centers": "#FFFF00", "places_of_worship": "#D8BFD8", "event_spaces": "#D8BFD8", "guest_housing": "#FFA500", "pet_care_facilities": "#FFA500", "public_sanitation_facilities": "#A0A0A0", "environmental_monitoring_stations": "#90EE90", "disaster_preparedness_center": "#A0A0A0", "outdoor_community_spaces": "#90EE90", # Add other types with their corresponding colors } # Function to draw the grid with optional highlighting def draw_grid(data, highlight_coords=None): fig, ax = plt.subplots(figsize=(12, 12)) nrows, ncols = data['size']['rows'], data['size']['columns'] ax.set_xlim(0, ncols) ax.set_ylim(0, nrows) ax.set_xticks(range(ncols+1)) ax.set_yticks(range(nrows+1)) ax.grid(True) for building in data['buildings']: coords = building['coords'] b_type = building['type'] size = building['size'] color = color_codes.get(b_type, '#FFFFFF') # Default color is white if not specified if highlight_coords and (coords[0], coords[1]) == tuple(highlight_coords): highlighted_color = "#FFD700" # Gold for highlighting ax.add_patch(plt.Rectangle((coords[1], nrows-coords[0]-size), size, size, color=highlighted_color, edgecolor='black', linewidth=2)) else: ax.add_patch(plt.Rectangle((coords[1], nrows-coords[0]-size), size, size, color=color, edgecolor='black', linewidth=1)) ax.text(coords[1]+0.5*size, nrows-coords[0]-0.5*size, b_type, ha='center', va='center', fontsize=8, color='black') ax.set_xlabel('Columns') ax.set_ylabel('Rows') ax.set_title('Village Layout with Color Coding') return fig # Main Streamlit app function def main(): st.title('Green Smart Village Application') # Divide the page into three columns col1, col2, col3 = st.columns(3) with col1: st.header("Today's Agenda") st.write("1. Morning Meeting\n2. Review Project Plans\n3. Lunch Break\n4. Site Visit\n5. Evening Wrap-up") st.header("Agent Advisors") st.write("Would you like to optimize your HIN number?") st.header("My Incentive") st.write("Total incentive for HIN optimization") with col2: st.header("Green Smart Village Layout") data = load_data('grid.json') # Ensure this path is correct # Dropdown for selecting a building building_options = [f"{bld['type']} at ({bld['coords'][0]}, {bld['coords'][1]})" for bld in data['buildings']] selected_building = st.selectbox("Select a building to highlight:", options=building_options) selected_index = building_options.index(selected_building) selected_building_coords = data['buildings'][selected_index]['coords'] # Draw the grid with the selected building highlighted fig = draw_grid(data, highlight_coords=selected_building_coords) st.pyplot(fig) # Assuming sensors are defined in your data, display them sensors = data['buildings'][selected_index].get('sensors', []) st.write(f"Sensors in selected building: {', '.join(sensors)}") with col3: st.header("Check Your HIN Number") # Placeholder for HIN number functionality st.write("Enter your HIN number to check details...") hin_number = st.text_input("Enter your HIN number:") if hin_number: st.write("HIN number details...") # Placeholder for actual HIN number check if __name__ == "__main__": main()