summaryrefslogtreecommitdiff
path: root/ero1/src/generation/suburb_snowplow_generation.py
blob: 156bdda14119519e19d70b62ab0b3cc99b2eca69 (plain)
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
import networkx as nx
from src.generation.graph_generation import generate_graph
from src.helper.export_import_yaml import load_paths_from_yaml
import osmnx as ox

arrondissements = [
    'Anjou',
    'Le Plateau-Mont-Royal',
    'Outremont',
    'Rivière-des-Prairies–Pointe-aux-Trembles',
    'Verdun',
]


def logic_quartiers_(path_list, montreal_g, suburb_list, debug_mode=False):
    """
    the main logic behind the generate_quartiers functions
    """

    if debug_mode:
        tot_edges = 0
        tot_nodes = 0
        for arr in suburb_list:
            g_temp = ox.graph_from_place(
                arr + ", Montréal, Québec, Canada", network_type='drive')
            removed = [(u, v, k)
                       for u, v, k in g_temp.edges(keys=True) if k > 0]
            g_temp.remove_edges_from(removed)
            tot_edges += len(g_temp.edges)
            tot_nodes += len(g_temp.nodes)

        print("tot_edges = " + str(tot_edges))
        print("tot_nodes = " + str(tot_nodes))

    # graph_mont = generate_graph("Montréal, Québec, Canada")
    graph_mont = montreal_g

    res = nx.DiGraph()

    i = 0

    for arr in suburb_list:
        for u, v in path_list[arr]:
            # print("u : " + str(u))
            # print("v : " + str(v))
            # print("noeud u: "+str(graph_mont.nodes[u]))
            # print("noeud v: "+str(graph_mont.nodes[v]))
            # print("(u,v) in graph : " + str((u, v)
            #       in graph_mont.edges(keys=False)))
            # print("edge u,v: "+str(graph_mont.edges[(u, v, 0)]))
            try:
                res.add_node(u, **graph_mont.nodes[u])
                res.add_node(v, **graph_mont.nodes[v])
                if graph_mont.has_edge(u, v):
                    res.add_edge(u, v, **graph_mont.edges[(u, v, 0)])
                if graph_mont.has_edge(v, u):
                    res.add_edge(v, u, **graph_mont.edges[(v, u, 0)])
            except:
                i += 1
                continue

    return res


def generate_quartiers_from_yaml(path_yaml_drone, montreal_g, suburb_list=arrondissements, debug_mode=False):
    """
        Génère un graphe qui est l'union des edges/nodes des graphes de chaque
        quartiers où path_yaml_drone est le chemin du fichier yaml qui
        contient le resultat du drone
        Parameters:
            debug_mode (bool: default = False): le debug mode duh
        Return:
            nx.MultiDiGraph/nx.DiGraph : la fusion des quartiers
    """
    path_res = load_paths_from_yaml(path_yaml_drone)
    return logic_quartiers_(path_res, montreal_g, suburb_list, debug_mode)


def generate_quartiers_from_path(path_list, montreal_g, suburb_list=arrondissements, debug_mode=False):
    """
        Génère un graphe qui est l'union des edges/nodes des graphes de chaque
        quartiers où path_list est le resultat du drone
        Parameters:
            debug_mode (bool: default = False): le debug mode duh
        Return:
            nx.MultiDiGraph/nx.DiGraph : la fusion des quartiers
    """
    return logic_quartiers_(path_list, montreal_g, suburb_list, debug_mode)