File size: 6,209 Bytes
f63cb2d
 
 
50cb32e
628c5fb
 
e81552f
 
628c5fb
 
 
0047175
 
 
 
 
 
 
 
e81552f
f63cb2d
 
 
 
 
 
a43ae41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0565b67
a43ae41
9ed411a
a43ae41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
800ba7b
 
 
f78a66a
a43ae41
 
 
 
 
 
f63cb2d
50cb32e
 
f63cb2d
 
 
 
 
 
 
 
 
a43ae41
f63cb2d
2ed9128
 
d680ff8
85ab470
f63cb2d
 
 
 
a43ae41
f63cb2d
 
f598d77
7556c05
 
 
 
 
 
 
 
34ddbbd
f63cb2d
 
2edea2c
 
0047175
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f63cb2d
 
a43ae41
f63cb2d
34ddbbd
 
f63cb2d
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
import streamlit as st
import json
import matplotlib.pyplot as plt
import time


st.set_page_config(layout="wide")




# HIN Number +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
from SPARQLWrapper import SPARQLWrapper, JSON
from streamlit_agraph import agraph, TripleStore, Node, Edge, Config
import json


# Green Village ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


# 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']))


    # Reverse the y-axis numbers
    # ax.invert_yaxis()            
    # 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")
        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")
        # 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)

        # Interactivity: Selecting a building to display sensor data
        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 view sensors:", options=building_options)
        selected_index = building_options.index(selected_building)
        sensors = data['buildings'][selected_index]['sensors']
        st.write(f"Sensors in selected building: {', '.join(sensors)}")



    with col3:
        st.header("Check Your HIN Number")
        config = Config(height=400, width=400, nodeHighlightBehavior=True, highlightColor="#F7A7A6", directed=True,
                  collapsible=True)

        #based on Insurance Fraud
        with open("data/fraud.json", encoding="utf8") as f:
          fraud_file = json.loads(f.read())
          st.session_state['fraud_topic'] = fraud_file
          fraud_store = TripleStore()
          for sub_graph in fraud_file["children"]:
            fraud_store.add_triple(fraud_file["name"], "has_subgroup", sub_graph["name"], picture=fraud_file["img"])
            for node in sub_graph["children"]:
              node1 = node["role"]
              link = "blongs_to"
              node2 = sub_graph["name"]
              pic = node["img"]
              fraud_store.add_triple(node1, link, node2, picture=pic)
          agraph(list(fraud_store.getNodes()), (fraud_store.getEdges()), config)


        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()