jakubscholtz
feat: logging
663f4dc
Raw
History Blame Contribute Delete
3.31 kB
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"