Spaces:
Running
Running
File size: 3,435 Bytes
6546fcc 663f4dc 6546fcc 8f7f056 6546fcc 8f7f056 6546fcc 42bcde6 83ebe75 42bcde6 663f4dc 42bcde6 663f4dc 6546fcc 8f7f056 6546fcc 663f4dc 6546fcc 663f4dc 6546fcc 663f4dc 6546fcc 663f4dc 6546fcc 8f7f056 6546fcc 8f7f056 6546fcc 663f4dc 6546fcc 8f7f056 6546fcc 8f7f056 6546fcc cdea60a 6546fcc 663f4dc 6546fcc 663f4dc 6546fcc 663f4dc | 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 | 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)
self.gp_frame = geopandas.read_file(
self.map_name,
encoding="UTF-8"
)
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"
|