Prérequis : maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties)
Contexte de la mise en œuvre de l'activité : en classe, en présence de l'enseignant
Ressources, matériel, documents nécessaires : bibliothèques Python (pyroutelib3, folium)
Présentation
Alexandre est en voyage à Paris. À pied, il souhaite rejoindre la tour Eiffel pour la visiter, depuis la place de l'Étoile où il se trouve actuellement.
Nous allons écrire un programme qui proposera un trajet entre les deux lieux et affichera ce trajet sur une carte.
Pour cela, nous utiliserons deux bibliothèques Python adaptées.
Préparation
La bibliothèque folium permet d'ouvrir une carte et d'afficher des points repérés par la latitude et la longitude.
Les fonctions nécessaires sont les suivantes :
m = folium.Map(location=[43.29695, 5.38107]) : pour créer une carte "m" centrée sur les coordonnées GPS données. On peut ajouter l'option zoom_start=12 pour obtenir un zoom particulier.
folium.Marker([43.29695, 5.38107],popup="lieu recherché").add_to(m) : pour ajouter un marqueur et un commentaire.
m.save("carte.html") : pour sauvegarder la carte au format HTML que l'on peut visualiser avec un navigateur.
Nous utilisons la classe Router de la bibliothèque "pyroutelib3" pour déterminer une route. Les fonctions nécessaires sont les suivantes :
- router = Router("mode de transport"), création de l'objet router avec comme mode de transport : car, cycle, foot, horse, tram, train
- point_depart = router.findNode(*depart), pour définir un point de départ où *depart représente une liste contenant la lattitude et la longitude depart = [48.8735, 2.2959]
- status, route = router.doRoute(point_depart, point_arrivee), détermine la route si possible (status)
- etapes = list(map(router.nodeLatLon, route)), représente les différents points de la route
- folium.PolyLine(etapes, color="green", weight=5, opacity=0.7).add_to(m), ajoute le tracé de la route dans la carte.
Traitement des données avec Python
On souhaite se rendre à pied, de la place de l'étoile [48.8735, 2.2959] à la tour Eiffel [48.8591, 2.2935].
Pour centrer la carte, on calculera le milieu géométrique du segment reliant le point de départ et le point d'arrivée. On centrera la carte sur ce point.
1. Complétez le programme suivant :
from pyroutelib3 import Router
import folium
depart = ..............................................
arrivee = .....................................................
milieu = [.....................................................................]
m = folium.Map(location=milieu, zoom_start=15)
folium.Marker(depart, popup="Départ").add_to(m)
folium.Marker(.................................................).add_to(m)
router = Router("foot")
point_depart = ......................................................
point_arrivee = ........................................................
status, route = router.doRoute(point_depart, point_arrivee)
if status == 'success':
etapes = list(map(router.nodeLatLon, route))
folium.PolyLine(etapes, color="green", weight=5, opacity=0.7).add_to(m)
m.save("carte.html")
La fonction calcul_dist permet de déterminer la distance parcourue.
2. Visualisez également ce trajet pour un déplacement en taxi et à vélo et affichez les distances correspondantes.