Python et itinéraires

Pour aller plus loin sur la cartographie numérique

Nous allons utiliser les cartes proposées par Open Street Map et le langage Python afin de générer des cartes personnalisées. Plus exactement, nous allons utiliser une bibliothèque Python nommée Folium. Une bibliothèque Python permet de rajouter des fonctionnalités au langage de base. Folium va donc nous permettre de créer nos propres cartes à partir des cartes proposées par Open Street Map

Remarque importante : pour ce TP, la librairie « Folium » doit être installée au préalable.

programmation Python et cartographie

  • ouvrir Edupython
  • Créer un dossier nommé par exemple "cartOSM" et enregistrer dans ce dossier un fichier Python contenant les lignes de code suivantes :
  • import folium # imporation bibliothèque pour générer des cartes
    import webbrowser # imporation bibliothèque pour les pages web
    c= folium.Map(location=[47.7207, -1.3761])
    c.save('jailacarte.html')# sauvegarde la carte
    webbrowser.open("jailacarte.html") # ouvre le fichier html
    
    
                                
  • Exécuter le code ci-dessus et vérifier qu’un fichier "jailacarte.html" a été créé. (Nous avons une véritable carte et pas une simple image : il est possible de zoomer ou de se déplacer).
  • Modifier le programme du paragraphe précédent pour qu'il génère une carte centrée sur la ville de votre choix. Rappel : la longitude et la latitude d'une ville peuvent être trouvées avec géoportail).
    Modifier le programme du paragraphe précédent pour qu'il génère une carte centrée sur la ville de votre choix. Rappel : la longitude et la latitude d'une ville peuvent être trouvées avec géoportail).
    import folium # imporation bibliothèque pour générer des cartes
    import webbrowser # imporation bibliothèque pour les pages web
    c= folium.Map(location=[47.7207, -1.3761],zoom_start=15)
    c.save('jailacarte.html')# sauvegarde la carte
    webbrowser.open("jailacarte.html") # ouvre le fichier html
    
                                
  • Afin de vraiment personnaliser la carte, il est possible d'ajouter des marqueurs sur la carte. Un marqueur sera simplement défini par ses coordonnées (latitude et longitude).
  • import folium # imporation bibliothèque pour générer des cartes
    import webbrowser # imporation bibliothèque pour les pages web
    c= folium.Map(location=[47.71546680966448, -1.3767517619629162],zoom_start=20)
    folium.Marker([47.71546680966448, -1.3767517619629162],).add_to(c)
    c.save('ihavethecard.html')
    webbrowser.open('ihavethecard.html') # ouvre le fichier html
    
    
    
    
                            
    Il est possible d'associer une information à un marqueur en ajoutant le paramètre "popup" folium.Marker([47.71546680966448, -1.3767517619629162],popup="Mon lycée",).add_to(c) Il suffira de cliquer sur le marqueur pour que l'information définie par le paramètre "popup" apparaisse à l'écran.
  • Mettre sur la carte en plus du marqueur de châteaubriant, un ou plusieurs markers contenant du texte.
  • Pour les plus curieux, vous pouvez utiliser les ressources et modifier ou ajouter des choses (couleur, type de marker...)

  • Les calculs d'itinéraires :

    Itinéraire : chemin à suivre pour se rendre d’un point géographique A à un point géographique B.

    Comme vous avez pu le constater quand vous avez travaillé sur Open Street Map, il est possible de définir les voies de communication (les routes). La base de données OpenStreetMap contient donc les données des routes répertoriées à ce jour. En utilisant ces données, il est possible de développer des outils capables de calculer des itinéraires routiers.

    Comme le propose toutes les applications web de type "GPS " (Googlemap,Viamichemlin, mappy...)

    Il suffit de renseigner votre lieu de départ, votre lieu d'arrivée puis l'application web calcule votre itinéraire.

    Ce calcul d'itinéraire repose sur des algorithmes, par exemple l'algorithme de Dijkstra qui permet d'obtenir le plus court chemin entre deux points.

    Mais tous les logiciels de calcul d’itinéraires utilisent ils le même algorithme ?

    1. Déterminer à l’aide de Mappy et Viamichelin et calculerlesdistances.com le kilométrage et le temps nécessaire pour aller du lycée Saint joseph à Chateaubriant jusqu’à Bagnères-de-Luchon.

      On notera la distance et le temps de parcours annoncé par application.

    2. Quel constat faire?

    Nous avons réalisé un script Python qui permet de construire un graphe et de déterminer le plus court chemin avec l'algorithme de Dijsktra :

    BGdu44 veut se rendre à Atlantis en partant de Chateaubriant.

    La tableau suivant donne les liaisons possibles avec leur temps de parcours et leur distances :

    Liaison Distance Temps
    Chateaubriant/Nozay 27km 27 min
    Nozay/Héric 18 km 10 min
    Héric/Orvault 17 km 10 min
    Orvault/Atlantis 9km 8 min
    Chateaubriant/Moisdon la rivière 11 km 11min
    Moisdon la rivière/Nort sur Erdre 24 km 21 min
    Nort sur Erdre/Carquefou 19km 19min
    Carquefou/Atlantis 15 km 12 min

    En adaptant le script suivant :

    1. Déterminer le parcours le plus rapide
    2. Déterminer le parcours le moins long