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"