Spaces:
Running
Running
| import geopandas | |
| import streamlit as st | |
| from utils import save_report | |
| class view: | |
| def __init__(self) -> None: | |
| self.level = 0 | |
| self.choice = None | |
| self.centroid = [45.0703, 7.800] | |
| self.hierarchy = [] | |
| self.hierarchy_names = [] | |
| self.update_on_level() | |
| def update_on_level(self): | |
| self.map_name = self.get_map_name() | |
| try: | |
| self.gp_frame = geopandas.read_file(self.map_name) | |
| except: | |
| st.error( | |
| "We are sorry, our app is unable to load this map. Please try again later." | |
| ) | |
| save_report( | |
| st.session_state, modal=None, error=f"Could not load {self.map_name}" | |
| ) | |
| st.stop() | |
| if self.level == 0: | |
| self.centroid = [45.0703, 7.800] | |
| # if self.level == 1: | |
| # filter = (self.gp_frame['reg_istat_code_num'] == self.hierarchy[-1]) | |
| centroid_coords = (self.gp_frame["geometry"].centroid).get_coordinates() | |
| lat = sum(centroid_coords["y"].to_list()) / len(centroid_coords["y"].to_list()) | |
| lon = sum(centroid_coords["x"].to_list()) / len(centroid_coords["x"].to_list()) | |
| self.centroid = [lat, lon] | |
| def render(self): | |
| return [self.get_map_name(), self.centroid, (7 + self.level)] | |
| def go_up(self): | |
| if self.level > 0: | |
| self.level -= 1 | |
| self.hierarchy = self.hierarchy[:-1] | |
| self.hierarchy_names = self.hierarchy_names[:-1] | |
| self.update_on_level() | |
| ## Handle vdA here by hand | |
| if self.level == 1: | |
| if self.hierarchy[-1] == 2: | |
| self.level -= 1 | |
| self.hierarchy = self.hierarchy[:-1] | |
| self.hierarchy_names = self.hierarchy_names[:-1] | |
| self.update_on_level() | |
| def go_down(self, choice): | |
| self.choice = choice | |
| # if self.level == 2: | |
| # self.hierarchy.append(choice["com_istat_code_num"]) | |
| # self.level += 1 | |
| # self.update_on_level() | |
| if self.level == 1: | |
| self.hierarchy.append(choice["prov_istat_code_num"]) | |
| self.hierarchy_names.append(choice["prov_name"]) | |
| self.level += 1 | |
| self.update_on_level() | |
| if self.level == 0: | |
| self.hierarchy.append(choice["reg_istat_code_num"]) | |
| self.hierarchy_names.append(choice["reg_name"]) | |
| self.level += 1 | |
| self.update_on_level() | |
| # Handle VdA here by hand | |
| if choice["reg_istat_code_num"] == 2: | |
| self.hierarchy.append(7) | |
| self.hierarchy_names.append("Aosta") | |
| self.level += 1 | |
| self.update_on_level() | |
| def is_muni(self): | |
| if self.level == 2: | |
| return True | |
| else: | |
| return False | |
| def get_map_name(self): | |
| if self.level == 0: | |
| return "./maps/regions_I0.geojson" | |
| if self.level == 1: | |
| return f"./maps/provinces_R{self.hierarchy[-1]:02d}.geojson" | |
| if self.level == 2: | |
| return f"./maps/municipalities_P{self.hierarchy[-1]:03d}.geojson" | |
| # if self.level == 3: | |
| # return f"./maps/municipalities_P{self.hierarchy[-2]:03d}.geojson" | |