• Aucun résultat trouvé

Activité n°1 : « Générer un fond de carte marqué! »

N/A
N/A
Protected

Academic year: 2022

Partager "Activité n°1 : « Générer un fond de carte marqué! »"

Copied!
3
0
0

Texte intégral

(1)

L’essentiel sur :

« 4-Calcul d’itinéraires»

Durée :

-Utiliser un logiciel pour calculer un itinéraire.

-Représenter un calcul d’itinéraire comme un problème sur un graphe. 4 semaines

Sur Open Street Map, il est possible de définir les voies de communication (principalement les routes). La base de données OSM contient donc les routes (enfin, la plupart des routes...). En utilisant ces données, il est possible de développer des outils capables de calculer des itinéraires routiers (comme le propose tous les logiciels "GPS" : Waze, ViaMichelin, Mappy...) : vous renseignez votre lieu de départ, votre lieu d'arrivée puis le logiciel calcule votre itinéraire.

Ce calcul d'itinéraire repose sur des algorithmes relativement complexes, par exemple l'algorithme de Dijkstra qui permet d'obtenir le plus court chemin entre deux points. Sans entrer dans les détails, l'algorithme de Dijkstra travaille sur des graphes (chaque ville est un sommet du graphe et chaque route est une arête du graphe).

- Visionner cette vidéo : https://youtu.be/JPeCmKFrKio

La bibliothèque Python pyroutelib3 propose des "outils" pour calculer des itinéraires à partir des données d'Open Street Map.

Activité n°1 : « Générer un fond de carte marqué! »

-Créer un dossier nommé : "itinéraire"

-Ouvrir le logiciel Edupython pour saisir le programme ci-dessous.

from pyroutelib3 import Router

router = Router("car")

depart = router.findNode(46.078025, 6.409053) arrivee = router.findNode(46.193253, 6.234158) status, route = router.doRoute(depart, arrivee) if status == 'success':

routeLatLons = list(map(router.nodeLatLon, route))

-Exécuter le programme.

-Enregistrer ce programme, dans le dossier précédent, sous le nom

"pyroutelib3.py"

(2)

Une fois l'exécution du programme terminée (cela peut prendre quelques minutes), à l'aide de l'"explorateur de variables" de Edupython, visionnez le contenu de la variable "routeLatLons".

Comme vous pouvez le constater, cette variable contient une liste de couples de valeurs (latitude, longitude). Cette liste contient donc les coordonnées des différents points par lesquels il faut passer pour se rendre du point de départ jusqu'au point d'arrivée (en passant bien évidemment par les routes définies dans Open Street Map).

Détails des explications sur le programme proposé :

Nous commençons par importer la bibliothèque "pyroutelib3" avec la première ligne "from pyroutelib3 import Router"

La deuxième ligne permet de définir le véhicule qui sera utilisé pour effectuer le trajet. Dans notre cas, nous utilisons une voiture ("car"), mais il est possible de choisir d'autres moyens de transport : cycle, foot, horse, tram, train.

Les 2 lignes suivantes permettent de définir le point de départ et le point d'arrivée. Nous avons "router.findNode(latitude, longitude)", il suffit de renseigner la latitude et la longitude du lieu.

La ligne "status, route = router.doRoute(depart, arrivee)" permet d'effectuer le calcul de l'itinéraire.

La dernière ligne est exécutée uniquement si le calcul est mené à son terme ("if" de la ligne précédente). La variable "routeLatLons" contient la liste des coordonnées des points de cheminement (points qui constituent le chemin entre le point de départ et le point d'arrivée)

Exercice :

-Modifier le programme précédent, pour calculer le trajet entre deux villes de votre choix avec le moyen de transport de votre choix.

Avoir une liste de coordonnées, c'est déjà pas mal, mais cette liste n'est pas très exploitable telle quelle. Nous allons donc utiliser ce que nous avons déjà vu précédemment sur la création de cartes.

Activité n°2 : « Générer un fond de carte marqué! »

(3)

-Tester le programme ci-dessous (une fois le programme Python exécuté, l’ouvrir avec un navigateur web le fichier "maCarte.html").

from pyroutelib3 import Router import folium

router = Router("car")

depart = router.findNode(48.444695, 1.512498) arrivee = router.findNode(48.7333309, 1.361747) status, route = router.doRoute(depart, arrivee) if status == 'success':

routeLatLons = list(map(router.nodeLatLon, route)) c= folium.Map(location=[48.444695, 1.512498],zoom_start=10) for coord in routeLatLons:

coord=list(coord)

folium.Marker(coord).add_to(c) c.save('maCarte.html')

Le programme ci-dessous ne devrait pas vous poser trop de problèmes.

Seule nouveauté, la boucle "for" :

for coord in routeLatLons:

coord=list(coord)

folium.Marker(coord).add_to(c)

qui permet de parcourir la liste de coordonnées (contenue dans la variable

"routeLatLons") et d'ajouter un marqueur pour chaque couple de coordonnées.

Exercice :

-Modifier le programme précédent pour qu'apparaisse sur une carte un itinéraire de votre choix (en définissant le point de départ, le point d'arrivée et le type de véhicule).

Références

Documents relatifs

[r]

[r]

Dans un premier temps, soulignons que le résultat est immédiat si f est la fonction nulle. Nous supposons donc, à partir de maintenant, que f n’est pas la

distance entre les deux centres est égale à la somme des rayons) ou intérieurement (la distance entre les deux centres est cette fois égale à la valeur absolue de la différence

 Prenez à droite, puis encore une fois à droite pour emprunter le grand chemin de cailloux avec une barrière en bois qui monte dans la forêt.. Une nouvelle fois Cyntia cria de

*Nota: si deux points ou plus sont à égale distance d'un point numéroté i, l'un quelconque de ces points peut être le point numéroté i + 1. Même énigme avec

*Nota: si deux points ou plus sont à égale distance d'un point numéroté i, l'un quelconque de ces points peut être le point numéroté i + 1. et par construction , le triangle EGD

*Nota: si deux points ou plus sont à égale distance d'un point numéroté i, l'un quelconque de ces points peut être le point numéroté i + 1. Solution