Itinéraire avec Python (GUI)

MéthodePréparation

Utilisation d'édupython 3 et des Modules/Librairies pyroutelib3, folium, webbrowser et tkinter (Rappel installation Bibliothèque/Module).

Interaction Utilisateur/Ordinateur à l'aide d'une Interface Graphique Utilisateur (GUI = Graphical User Interface).

SimulationCode Python

1
#---------BIBLIOTHEQUES/MODULES---------
2
from pyroutelib3 import Router
3
import folium
4
import webbrowser
5
from tkinter.messagebox import * # boîte de dialogue
6
from tkinter import *
7
import tkinter as tk
8
9
#----------FONCTIONS----------
10
# Fonction carte
11
def carto():
12
    # Récupération des données entrées
13
    lieudepart = depart.get()
14
    longitude1 = long1.get()
15
    latitude1 = lat1.get()
16
    lieuarrivee = arrivee.get()
17
    longitude2 = long2.get()
18
    latitude2 = lat2.get()
19
20
    # lieux
21
    departi = [float(longitude1), float(latitude1)] #[46.548453, 3.286341]
22
    arriveei = [float(longitude2), float(latitude2)] #[46.566067 , 3.332859]
23
24
    #type de déplacement : cycle, foot, horse, tram, train, car ?
25
    router = Router("car")
26
27
    # Création des points de départ et d'arrivée
28
    ptdepart = router.findNode(departi[0],departi[1])
29
    ptarrivee = router.findNode(arriveei[0],arriveei[1])
30
31
    #print(longitude1, latitude1)
32
33
    # calcul itinéraire : test de l'existence d'une route
34
    status, itineraire = router.doRoute(ptdepart, ptarrivee)
35
    if status == 'success':
36
        routeLatLons = list(map(router.nodeLatLon, itineraire)) # liste des points du parcours
37
    # création de la carte
38
    carte= folium.Map(location=[(departi[0]+arriveei[0])/2,(departi[1]+arriveei[1])/2],zoom_start=14)
39
    # ajout des points (noeuds) du parcours à la carte
40
    for indice,coord in enumerate(routeLatLons):
41
        if indice%10==0:
42
            coord=list(coord)
43
            folium.Marker(coord).add_to(carte)
44
    # ajout à la carte du tracé d'une ligne reliant les points/noeuds du parcours
45
    itineraire_coordonnees = list(map(router.nodeLatLon, itineraire)) # liste des points du parcours
46
    folium.PolyLine(
47
        itineraire_coordonnees,
48
        color="blue",
49
        weight=2.5,
50
        opacity=1
51
        ).add_to(carte)
52
    # enregistrement et affichage de la carte
53
    nomcarte = lieudepart+'_'+lieuarrivee+'.html'
54
    carte.save(nomcarte)
55
    webbrowser.open(nomcarte)
56
57
#----------PROGRAMME PRINCIPAL----------
58
59
# Création de la fenêtre principale (main window)
60
Mafenetre = tk.Tk()
61
Mafenetre.title('Itinéraire')
62
# Taille de la fenêtre
63
Mafenetre.geometry("460x250")
64
Mafenetre.configure(bg = 'orange')
65
tk.Label(Mafenetre, text = 'Itinéraire',
66
bg = 'orange', font=("Arial", 12, "bold")).grid(row=0, column=0)
67
68
# widget Nom du Lieu de Départ
69
tk.Label(Mafenetre, text = 'Départ =', bg = 'orange', fg='blue', font=("Arial", 11)).grid(row=1)
70
depart = tk.Entry(Mafenetre, bg ='bisque', fg='blue', font=("Arial", 11))
71
depart.grid(row=1, column=1)
72
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=1, column=2)
73
# widget Longitude
74
tk.Label(Mafenetre, text = 'Longitude ', bg = 'orange', fg='blue', font=("Arial", 11)).grid(row=2,column=1)
75
long1 = tk.Entry(Mafenetre, bg ='bisque', fg='blue', font=("Arial", 11))
76
long1.grid(row=3, column=1)
77
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=3, column=2)
78
# widget Latitude
79
tk.Label(Mafenetre, text = 'Latitude ', bg = 'orange', fg='blue', font=("Arial", 11)).grid(row=2,column=3)
80
lat1 = tk.Entry(Mafenetre, bg ='bisque', fg='blue', font=("Arial", 11))
81
lat1.grid(row=3, column=3)
82
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=3, column=4)
83
84
# widget Nom du Lieu d'Arrivée
85
tk.Label(Mafenetre, text = 'Arrivée =', bg = 'orange', fg='green', font=("Arial", 11)).grid(row=5)
86
arrivee = tk.Entry(Mafenetre, bg ='bisque', fg='green', font=("Arial", 11))
87
arrivee.grid(row=5, column=1)
88
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=5, column=2)
89
# widget Longitude
90
tk.Label(Mafenetre, text = 'Longitude ', bg = 'orange', fg='green', font=("Arial", 11)).grid(row=6, column=1)
91
long2 = tk.Entry(Mafenetre, bg ='bisque', fg='green', font=("Arial", 11))
92
long2.grid(row=7, column=1)
93
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=7, column=2)
94
# widget Latitude
95
tk.Label(Mafenetre, text = 'Latitude ', bg = 'orange', fg='green', font=("Arial", 11)).grid(row=6,column=3)
96
lat2 = tk.Entry(Mafenetre, bg ='bisque', fg='green', font=("Arial", 11))
97
lat2.grid(row=7, column=3)
98
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=7, column=4)
99
100
101
# widget bouton Valider
102
Valider = tk.Button(Mafenetre, text ='Valider', font=("Arial", 12, "bold"), command=carto)
103
Valider.grid(row=8, column=1, sticky=tk.W, pady=4)
104
105
# widget bouton Quitter
106
Quitter = tk.Button(Mafenetre, text ='Quitter', font=("Arial", 12, "bold"), command = Mafenetre.destroy)
107
Quitter.grid(row=8, column=3, sticky=tk.W, pady=4)
108
109
# widget Obligatoire
110
tk.Label(Mafenetre, text = '* Champs obligatoire', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=9, column=1)
111
112
Mafenetre.mainloop()