import streamlit as st import json import matplotlib.pyplot as plt st.set_page_config(layout="wide") # Function to load and parse the JSON data def load_data(filename): with open(filename, 'r') as file: data = json.load(file) return data # Color codes updated with hexadecimal values for compatibility color_codes = { "residential": "#ADD8E6", # Light Blue "commercial": "#90EE90", # Light Green "community_facilities": "#FFFF00", # Yellow "school": "#FFFF00", # Yellow "healthcare_facility": "#FFFF00", # Yellow "green_space": "#90EE90", # Light Green "utility_infrastructure": "#90EE90", # Light Green "emergency_services": "#FF0000", # Red "cultural_facilities": "#D8BFD8", # Light Purple "recreational_facilities": "#D8BFD8", # Light Purple "innovation_center": "#90EE90", # Light Green "elderly_care_home": "#FFFF00", # Yellow "childcare_centers": "#FFFF00", # Yellow "places_of_worship": "#D8BFD8", # Light Purple "event_spaces": "#D8BFD8", # Light Purple "guest_housing": "#FFA500", # Orange "pet_care_facilities": "#FFA500", # Orange "public_sanitation_facilities": "#A0A0A0", # Grey "environmental_monitoring_stations": "#90EE90", # Light Green "disaster_preparedness_center": "#A0A0A0", # Grey "outdoor_community_spaces": "#90EE90" # Light Green } # Function to draw the grid layout with color coding def draw_grid(data): # Create a figure and a grid of subplots fig, ax = plt.subplots(figsize=(12, 12)) # Setting the grid size 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) # Plotting each building with its assigned color from the color_codes dictionary for building in data['buildings']: # Extracting the building details coords = building['coords'] b_type = building['type'] size = building['size'] color = color_codes.get(b_type, '#FFFFFF') # Default color is white if not specified # Plotting the building on the grid with color 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') # Draw roads for road in data.get('roads', []): # Check for roads in the data, default to empty list if not found start, end = road['start'], road['end'] # Determine if the road is vertical or horizontal based on start and end coordinates if start[0] == end[0]: # Vertical road for y in range(min(start[1], end[1]), max(start[1], end[1]) + 1): ax.add_patch(plt.Rectangle((start[0], nrows-y-1), 1, 1, color=road['color'])) else: # Horizontal road for x in range(min(start[0], end[0]), max(start[0], end[0]) + 1): ax.add_patch(plt.Rectangle((x, nrows-start[1]-1), 1, 1, color=road['color'])) # Setting labels and title ax.set_xlabel('Columns') ax.set_ylabel('Rows') ax.set_title('Village Layout with Color Coding') return fig # Streamlit application starts here def main(): st.title('Green Smart Village Application') # Creating three columns col1, col2, col3 = st.columns(3) with col1: st.header("Today's Agenda") # Example content for Today's Agenda st.write("1. Morning Meeting\n2. Review Project Plans\n3. Lunch Break\n4. Site Visit\n5. Evening Wrap-up") with col2: st.header("Green Smart Village Layout") # Load and display the data with color coding data = load_data('grid.json') # Ensure this path is correct fig = draw_grid(data) st.pyplot(fig) with col3: st.header("Check Your HIN Number") 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()