TP géolocalisation

Pour faire ce TP, Python doit être installé sur votre machine. Si ce n’est pas le cas, faites le : installation de Python.

Pour ce TP, nous allons utiliser la bibliothèque Folium. (La documentation : https://python-visualization.github.io/folium/quickstart.html )

Cette bibliothèque devrait déjà être installée dans votre EduPython.

Première carte

Créez un dossier nommé TP_geo et vous travaillerez dans ce dossier. Très bien, nous pouvons commencer.

Tapez le code suivant dans votre éditeur Python :

import folium
GYMNASE = [48.583676934977, 7.7480744317593]
carte = folium.Map(location=GYMNASE)
carte.save('carte.html')

Si vous allez voir dans votre dossier vous trouvez un fichier carte.html et si vous l’ouvrez, une jolie carte !

Première carte

Premières améliorations

On remarque que le niveau de zoom n’est pas forcément satisfaisant et que de devoir aller ouvrir le fichier html à la main ne l’est pas non plus.

Pour le niveau de zoom, il suffit d’utiliser le paramètre « zoom_start » et modifier le code précédent :

import folium
GYMNASE = [48.583676934977, 7.7480744317593]
carte = folium.Map(location=GYMNASE, zoom_start=17)
carte.save('carte.html')

Pour l’ouverture automatique de de la carte nous allons utiliser la bibliothèque os (qui permet d’interagir avec l’OS)

import folium
import os
GYMNASE = [48.583676934977, 7.7480744317593]
carte = folium.Map(location=GYMNASE, zoom_start=17)
fichier = 'carte.html'
carte.save(fichier)
####################################
# Ouverture automatique de la carte#
####################################
# On cherche le nom du repertoir courant
rep_cour = os.getcwd()
# On lance le navigateur
# On peut aussi faire start firefox (désolé pour l'utilisatrice de ie)
commande = 'start chrome file://'+rep_cour +'/'+ fichier
os.popen(commande)

Exercice :

Modifiez le niveau de zoom et indiquez les coordonnées géographiques de votre domicile plutôt que de votre lycée.

Les marqueurs

Pour ajouter un marqueur il faut procéder ainsi :

import folium
import os
GYMNASE = [48.583676934977, 7.7480744317593]
carte = folium.Map(location=GYMNASE, zoom_start=17)
folium.Marker(GYMNASE,popup="Le Gymnase").add_to(carte)
fichier = 'carte.html'
carte.save(fichier)
####################################
# Ouverture automatique de la carte#
####################################
# On cherche le nom du repertoir courant
rep_cour = os.getcwd()
# On lance le navigateur
# On peut aussi faire start firefox (désolé pour l'utilisatrice de ie)
commande = 'start chrome file://'+rep_cour +'/'+ fichier
os.popen(commande)

Le marqueur par défaut :

Marqueur

A vous maintenant !

Exercice

Modifiez le code précédent pour également ajouter un marqueur sur votre domicile.

Solution

import folium
import os
GYMNASE = [48.583676934977, 7.7480744317593]
DOMICILE = [48.556282, 7.750382] # Oui, c'est chez moi :)
carte = folium.Map(location=GYMNASE, zoom_start=13)
folium.Marker(GYMNASE,popup="Le Gymnase").add_to(carte)
folium.Marker(DOMICILE,popup="Home").add_to(carte)
fichier = 'carte.html'
carte.save(fichier)
####################################
# Ouverture automatique de la carte#
####################################
# On cherche le nom du repertoir courant
rep_cour = os.getcwd()
# On lance le navigateur
# On peut aussi faire start firefox (désolé pour l'utilisatrice de ie)
commande = 'start chrome file://'+rep_cour +'/'+ fichier
os.popen(commande)

On peut personnaliser les marqueurs, voici un exemple de personnalisation :

import folium
import os
GYMNASE = [48.583676934977, 7.7480744317593]
DOMICILE = [48.556282, 7.750382] # Oui, c'est chez moi :)
fichier = 'carte.html'
carte = folium.Map(
location=GYMNASE,
zoom_start=13,
)
# Changement de couleur du marqueur
folium.Marker(
GYMNASE,
popup="Le Gymnase",
icon=folium.Icon(color='green')
).add_to(carte)
# Changement de couleur du marqueur et changement d'icone
folium.Marker(
DOMICILE,
popup="Home",
icon=folium.Icon(color='red', icon='glyphicon-heart')
).add_to(carte)
#  On save
carte.save(fichier)
####################################
# Ouverture automatique de la carte#
####################################
# On cherche le nom du repertoir courant
rep_cour = os.getcwd()
# On lance le navigateur
# On peut aussi faire start firefox (désolé pour l'utilisatrice de ie)
commande = 'start chrome file://'+rep_cour +'/'+ fichier
os.popen(commande)

voici la liste des icônes disponibles : https://www.w3schools.com/icons/bootstrap_icons_glyphicons.asp

Périmètre de confinement

Sachant que le périmètre de confinement est de 1 km, nous allons tracer un cercle englobant la zone dans le périmètre autorisé.

Pour tracer un cercle :

folium.Circle(GYMNASE,radius = 200, fill=True, color='red' ).add_to(carte)

Attention, il existe également CircleMarker qui trace un cercle dont le rayon est donnée en pixel, pratique pour obtenir un cercle dont la taille ne dépend pas du zoom.

périmètre de confinement

Exercice

Ecrivez un programme qui affiche la zone de 1 km autorisée autour de votre domicile.

Solution

import folium
import os
GYMNASE = [48.583676934977, 7.7480744317593]
DOMICILE = [48.556282, 7.750382] # Oui, c'est chez moi :)
carte = folium.Map(location=GYMNASE, zoom_start=13)
folium.Marker(GYMNASE,popup="Le Gymnase").add_to(carte)
folium.Marker(DOMICILE,popup="Home").add_to(carte)
folium.Circle(DOMICILE,radius = 1000,fill=True, color='red' ).add_to(carte)
fichier = 'carte.html'
carte.save(fichier)
####################################
# Ouverture automatique de la carte#
####################################
# On cherche le nom du repertoir courant
rep_cour = os.getcwd()
# On lance le navigateur
# On peut aussi faire start firefox (désolé pour l'utilisatrice de ie)
commande = 'start chrome file://'+rep_cour +'/'+ fichier
os.popen(commande)

On remarque que pendant le confinement, je ne peux pas aller à Auchan Baggersee à pieds.

Itinéraires

(cette partie est destinée aux élèves de première et de terminale, mais pas interdite aux élèves de seconde)

Dans cette partie nous parlerons de graphe, notion effleurée en SNT dans le thème réseaux sociaux.
Vous trouverez ici d’excellentes vidéos sur les graphes : A la découverte des graphes pour commencer, les bases : « Graphes: introduction et notion de base »

Nous allons utiliser la bibliothèque pyroutelib3, donc… pip install pyroutelib3. (Toujours cmd et entrée dans la recherche Windows)

Nous allons calculer le trajet de votre domicile, jusqu’au lycée.

Voici le code :

from pyroutelib3 import Router
# le moyen de transport car, cycle, foot, horse, tram, train
router = Router("foot")
depart = router.findNode(48.583676934977, 7.7480744317593)
arrivee = router.findNode(48.556282,  7.750382)
# On vérifie qu'il existe bien une route entre ces deux points
status, route = router.doRoute(depart, arrivee)
#Si la route existe
if status == 'success':
route_coordonnees = list(map(router.nodeLatLon, route))

Le scripte met quelques secondes à s’exécuter (peut-être quelques minutes sur votre ordinateur et si vous habitez loin du lycée)

A la fin de ce script la variable route_coordonnees contient une liste de coordonnées (57 dans mon cas).

N’hésitez pas à tester, par exemple à cheval ou en voiture !

Maintenant, en utilisant les premières partie de ce TP nous allons afficher ce trajet. C’est quand même plus sympa !

On peut joindre l’ensemble des points du trajet avec la méthode PolyLine

from pyroutelib3 import Router
import folium
import os
GYMNASE = [48.583676934977, 7.7480744317593]
fichier = 'carte.html'
carte = folium.Map(
location=GYMNASE,
zoom_start=13,
)
# le moyen de transport car, cycle, foot, horse, tram, train
router = Router("foot")
depart = router.findNode(48.583676934977, 7.7480744317593)
arrivee = router.findNode(48.556282,  7.750382)
# On vérifie qu'il existe bien une route entre ces deux points
status, route = router.doRoute(depart, arrivee)
#Si la route existe
if status == 'success':
route_coordonnees = list(map(router.nodeLatLon, route))
# tracé d'une ligne reliant les coordonnées
folium.PolyLine(
route_coordonnees,
color="blue",
weight=2.5,
opacity=1
).add_to(carte)
#  On save
carte.save(fichier)
####################################
# Ouverture automatique de la carte#
####################################
# On cherche le nom du repertoir courant
rep_cour = os.getcwd()
# On lance le navigateur
# On peut aussi faire start firefox (désolé pour l'utilisatrice de ie)
commande = 'start chrome file://'+rep_cour +'/'+ fichier
os.popen(commande)

ou afficher un marqueur à chaque coordonnée du trajet avec l’aide d’une boucle :

from pyroutelib3 import Router
import folium
import os
GYMNASE = [48.583676934977, 7.7480744317593]
fichier = 'carte.html'
carte = folium.Map(
location=GYMNASE,
zoom_start=13,
)
# le moyen de transport car, cycle, foot, horse, tram, train
router = Router("foot")
depart = router.findNode(48.583676934977, 7.7480744317593)
arrivee = router.findNode(48.556282,  7.750382)
# On vérifie qu'il existe bien une route entre ces deux points
status, route = router.doRoute(depart, arrivee)
#Si la route existe
if status == 'success':
route_coordonnees = list(map(router.nodeLatLon, route))
# Boucle pour afficher un point à chaque coordonnée
for point in route_coordonnees:
folium.CircleMarker(
point,
radius= 2,
popup=str(point),
color='blue',
fill=True,
fill_color='blue'
).add_to(carte)
#  On save
carte.save(fichier)
####################################
# Ouverture automatique de la carte#
####################################
# On cherche le nom du repertoir courant
rep_cour = os.getcwd()
# On lance le navigateur
# On peut aussi faire start firefox (désolé pour l'utilisatrice de ie)
commande = 'start chrome file://'+rep_cour +'/'+ fichier
os.popen(commande)

Exercices : (à rajouter)

Stratégie algorithmique

ça, nous le verrons dans le TP : Dijkstra vs A*