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"