import geopandas import streamlit as st 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() self.gp_frame = geopandas.read_file(self.map_name) 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"