Recherche d'itinéraire en python
On va voir comment python peut servir à chercher un plus court chemin entre deux coordonnées GPS sur la carte openstreetmap, et comment on peut afficher le résultat.
Préparation : Ouvrez Thonny, allez dans Tools -> Manage Packages et recherchez (ignorez les pop-up d'erreur en cliquant sur Close) :
pyroutelib3et cliquez sur Installurllib3et cliquez sur...et dansDesired Versionchoisissez la1.26.20puis installezfoliumet cliquez sur Install
Exécution
Voici le code à copier, lire puis exécuter :
from pyroutelib3 import Router
import folium
router = Router("foot") # pour se déplacer à pied, "cycle" pour en vélo, "car" en voiture
# on cherche le sommet (Node) le plus près des coordonnées du lycée :
depart = router.findNode(45.179333, 5.731521)
# on cherche le sommet le plus près de la Bastille
arrivee = router.findNode(45.198709, 5.725296)
# puis on utilise la fonction qui va chercher l'itinéraire avec un algorithme similaire à Dijkstra
status, route = router.doRoute(depart, arrivee)
if status == 'success':
liste_coordonnees = list(map(router.nodeLatLon, route))
# on crée la carte avec la bibliothèque folium
c = folium.Map(location=[45.179333, 5.731521],zoom_start=10)
# et pour chaque coordonnée sur le chemin, on ajoute un marqueur sur la carte
for coord in liste_coordonnees:
coord=list(coord)
folium.Marker(coord).add_to(c)
# enfin on enregistre en html, ouvrez ensuite ce fichier pour voir le résultat
c.save('rando_bastille.html')
Conversion DMS (degré minute seconde) et degrés décimaux
Les coordonnées GPS sont données soit : * en degrés décimaux par exemple : 45.179333, 5.731521 (si la latitude est vers le sud, ou la longitude vers l'ouest les nombres seront négatifs) * en degré minute seconde comme : 45°10'46"N, 5°43'54"E où le système est en base 60 : une minute vaut 1/60e de degré et une seconde 1/60e de minute.
DMS -> décimaux
Avec ce qu'on a dit, 49° 25' 56.813” correspond à :
49 + 25/60 + 56.813/(60 * 60) = 49.4324481 °
Dans Thonny, recopiez et complétez la fonction suivante qui prend trois paramètres (le nombre de degrés, minutes, secondes) et renvoie la mesure en décimal. Une fois le code exécuté (avec le bouton play vert) dans la partie du haut de Thonny, testez la fonction en l'appelant dans la console en dessous.
def dms_vers_decimal(degres, minutes, secondes):
decimal = # mettez la formule ici pour calculer la valeur décimale
return decimal
puis testez dans la console par exemple dms_vers_decimal(49,25,56.813)
décimaux -> DMS
On souhaite convertir 49.4324481 en degrés minutes et secondes.
On effectue 3 étapes : - Les chiffres avant la virgule sont les degrés (49). - Les chiffres suivant la virgule sont à multiplier par 60. La partie entière définit les minutes : 0.4324481 × 60 = 25.946886 soit 25'. - Les chiffres après la virgule du résultat précédent sont à multiplier par 60 pour obtenir les secondes : 0.946886 × 60 = 56.81316”
Ainsi, 49.4324481° correspond à 49° 25' 56.81316”.
Partie entière et partie décimale en Python
On souhaite extraire la partie entière et la partie décimale de 25.5.
Testez dans la console python les expressions :
* int(25.5)
* 25.5 % 1
Qu'est-ce qui permet d'obtenir la partie entière ? la partie décimale ?
fonction de conversion
Copiez la fonction dans la partie script de Thonny et complétez-la
def decimal_vers_dms(decimal):
# compléter pour obtenir les degrés
degres =
# compléter pour le nombre de minutes en décimal
minutes_decimal =
# compléter pour le nombre de minutes (nombre entier)
minutes =
# compléter pour le nombre de secondes
secondes =
return degres, minutes, secondes
Puis testez dans la console les exemples vus au dessus et vérifiez les résultats.