Écrire votre nom
ici
Chacun d'entre nous a déjà utilisé des applications qui donnent un itinéraire entre deux lieux:
Par exemple voici un itinéraire entre les lycées de Jean moulin (Draguignan) et du val d'Argens(le Muy)
En Python la bibliothèque pyroutelib3 permet de déterminer des itinéraires à partir de coordonnées 'GPS'
Si elle n'est pas installée :
#pip install pyroutelib3
Le programme suivant stocke dans une liste une série de coordonnées de points qui réalise un itinéraire entre deux lieux :
from pyroutelib3 import Router
from geopy.geocoders import ArcGIS
geolocator = ArcGIS()
location1 = geolocator.geocode("Le Muy")
location2 = geolocator.geocode("Draguignan")
lat1=location1.latitude
lon1=location1.longitude
lat2=location2.latitude
lon2=location2.longitude
print(lat1,lon1)
# création de l'itinéraire
router = Router("car")
depart = router.findNode(lat1,lon1)
print(depart)
arrivee = router.findNode(lat2, lon2)
print(arrivee)
status, route = router.doRoute(depart,arrivee)
if status == 'success':
routeLatLons = list(map(router.nodeLatLon, route))
# on fait afficher la liste obtenue et sa longueur
print(routeLatLons)
print(len(routeLatLons))
Comme il y a 382 marqueurs, on utilisera une boucle qui ne fera afficher qu'un marqueur sur 10
Testez ce code :
from pyroutelib3 import Router
import folium
from geopy.geocoders import ArcGIS
geolocator = ArcGIS()
location1 = geolocator.geocode("Le Muy")
location2 = geolocator.geocode("Draguignan")
lat1=location1.latitude
lon1=location1.longitude
lat2=location2.latitude
lon2=location2.longitude
router = Router("car")
depart = router.findNode(lat1, lon1)
arrivee = router.findNode(lat2, lon2)
status, route = router.doRoute(depart, arrivee)
if status == 'success':
routeLatLons = list(map(router.nodeLatLon, route))
# création de la carte
c= folium.Map(location=[lat1, lon1],zoom_start=10)
for indice,coord in enumerate(routeLatLons):
if indice%10==0:
coord=list(coord)
folium.Marker(coord).add_to(c)
# voici une méthode pour sauvegarder la carte obtenue
c.save('maCarte5.html')
# affichage de la carte
display(c)
# Écrire le code ici
Si on additionne des distances géodésiques (Voir TP 2) de lieux proches, on approxime assez bien la distance réelle
Dans le code précédent routeLatLons est une liste de coordonnées de points proches les uns des autres
Voici un code qui permet d'additionner les distances géodésiques de ces lieux en miles
from pyroutelib3 import Router
from geopy.geocoders import ArcGIS
from geopy.distance import geodesic
geolocator = ArcGIS()
location1 = geolocator.geocode("Le Muy")
location2 = geolocator.geocode("Draguignan")
lat1=location1.latitude
lon1=location1.longitude
lat2=location2.latitude
lon2=location2.longitude
router = Router("car")
depart = router.findNode(lat1, lon1)
arrivee = router.findNode(lat2, lon2)
status, route = router.doRoute(depart, arrivee)
if status == 'success':
routeLatLons = list(map(router.nodeLatLon, route))
# calcul de la distance
d=0
for i in range(0,len(routeLatLons)-1,1):
d=d+geodesic(routeLatLons[i],routeLatLons[i+1]).miles
print(d, " miles")
8.843997795927313 miles
Faites calculer la distance en km entre deux lieux de votre choix pour une ballade à pied ...
# Écrire le code ici
Dans home sélectionnez le fichier et download