Cartographier un trajet
Collecte des coordonnées GPS, calcule des distances et crée une carte interactive de ton parcours domicile-lycée ou d'une balade.
Objectifs pédagogiques
- Comprendre les coordonnées GPS (latitude, longitude)
- Collecter des points GPS avec son smartphone
- Calculer la distance entre deux points (formule de Haversine)
- Créer une carte interactive avec Folium
- Réfléchir aux enjeux de vie privée liés à la géolocalisation
Prérequis
- Python avec les bibliothèques : folium, math (pip install folium)
- Un smartphone pour collecter les coordonnées GPS (optionnel)
- Connaissances de base en Python
Concepts clés
Latitude
Position Nord-Sud sur le globe, de -90° (pôle Sud) à +90° (pôle Nord). Paris est à environ 48.85° N.
Longitude
Position Est-Ouest sur le globe, de -180° à +180° par rapport au méridien de Greenwich. Paris est à environ 2.35° E.
Formule de Haversine
Formule mathématique pour calculer la distance entre deux points sur une sphère (la Terre).
Waypoint
Point de passage sur un itinéraire, défini par ses coordonnées GPS.
Les étapes du projet
Collecter les coordonnées GPS
Tu peux collecter les coordonnées de plusieurs façons :
- Google Maps : Clic droit sur un lieu pour voir ses coordonnées
- Application GPS : Utilise une app comme "GPS Coordinates"
- OpenStreetMap : Coordonnées dans l'URL quand tu navigues
# Points GPS de mon trajet
# Format : (nom, latitude, longitude)
trajet = [
("Domicile", 48.8566, 2.3522),
("Boulangerie", 48.8575, 2.3540),
("Arrêt de bus", 48.8590, 2.3555),
("Place du marché", 48.8620, 2.3580),
("Parc", 48.8650, 2.3600),
("Lycée", 48.8700, 2.3650)
]
# Afficher les points
for nom, lat, lon in trajet:
print(f"{nom}: {lat}°N, {lon}°E")Vie privée : Ne partage jamais tes vraies coordonnées de domicile ! Pour le projet, tu peux utiliser des coordonnées approximatives ou des lieux publics.
Calculer les distances
La formule de Haversine permet de calculer la distance entre deux points GPS en tenant compte de la courbure de la Terre.
import math
def haversine(lat1, lon1, lat2, lon2):
"""
Calcule la distance en km entre deux points GPS
"""
# Rayon de la Terre en km
R = 6371
# Convertir en radians
lat1, lon1, lat2, lon2 = map(math.radians, [lat1, lon1, lat2, lon2])
# Différences
dlat = lat2 - lat1
dlon = lon2 - lon1
# Formule de Haversine
a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
c = 2 * math.asin(math.sqrt(a))
return R * c
# Test : distance entre Paris et Lyon
distance = haversine(48.8566, 2.3522, 45.7640, 4.8357)
print(f"Distance Paris-Lyon : {distance:.1f} km")Résultat attendu :
Distance Paris-Lyon : 391.5 km
Calculer la distance totale du trajet
Calculons la distance de chaque étape et la distance totale.
def calculer_trajet(points):
"""
Calcule les distances entre chaque point du trajet
"""
distances = []
total = 0
for i in range(len(points) - 1):
nom1, lat1, lon1 = points[i]
nom2, lat2, lon2 = points[i + 1]
dist = haversine(lat1, lon1, lat2, lon2)
distances.append((nom1, nom2, dist))
total += dist
return distances, total
# Calculer les distances
distances, total = calculer_trajet(trajet)
print("Détail du trajet :")
print("-" * 50)
for depart, arrivee, dist in distances:
print(f"{depart} → {arrivee} : {dist*1000:.0f} m")
print("-" * 50)
print(f"Distance totale : {total*1000:.0f} m ({total:.2f} km)")Créer une carte interactive avec Folium
Folium permet de créer des cartes interactives basées sur OpenStreetMap.
import folium
# Créer la carte centrée sur le premier point
premier_point = trajet[0]
carte = folium.Map(
location=[premier_point[1], premier_point[2]],
zoom_start=14,
tiles='OpenStreetMap'
)
# Ajouter les marqueurs pour chaque point
for nom, lat, lon in trajet:
folium.Marker(
location=[lat, lon],
popup=nom,
tooltip=nom,
icon=folium.Icon(color='blue', icon='info-sign')
).add_to(carte)
# Marquer le départ en vert
folium.Marker(
location=[trajet[0][1], trajet[0][2]],
popup="DÉPART: " + trajet[0][0],
icon=folium.Icon(color='green', icon='home')
).add_to(carte)
# Marquer l'arrivée en rouge
folium.Marker(
location=[trajet[-1][1], trajet[-1][2]],
popup="ARRIVÉE: " + trajet[-1][0],
icon=folium.Icon(color='red', icon='flag')
).add_to(carte)
# Sauvegarder la carte
carte.save('mon_trajet.html')
print("Carte sauvegardée dans 'mon_trajet.html'")Tracer l'itinéraire
Ajoutons une ligne pour relier tous les points du trajet.
# Extraire les coordonnées pour la ligne
coordonnees = [[lat, lon] for nom, lat, lon in trajet]
# Tracer la ligne du trajet
folium.PolyLine(
locations=coordonnees,
weight=5, # Épaisseur de la ligne
color='blue', # Couleur
opacity=0.8, # Transparence
popup=f"Trajet total: {total*1000:.0f} m"
).add_to(carte)
# Ajouter une info-bulle avec la distance totale
folium.LayerControl().add_to(carte)
# Sauvegarder
carte.save('mon_trajet_complet.html')Estimer le temps de parcours
Calculons le temps de trajet selon différents modes de transport.
def estimer_temps(distance_km, mode):
"""
Estime le temps de parcours selon le mode de transport
"""
vitesses = {
'marche': 5, # km/h
'velo': 15, # km/h
'bus': 25, # km/h (avec arrêts)
'voiture': 40 # km/h (en ville)
}
vitesse = vitesses.get(mode, 5)
temps_heures = distance_km / vitesse
temps_minutes = temps_heures * 60
return temps_minutes
# Calculer pour chaque mode
print(f"\nTemps de parcours pour {total:.2f} km :")
print("-" * 40)
for mode in ['marche', 'velo', 'bus', 'voiture']:
temps = estimer_temps(total, mode)
print(f"En {mode:10} : {temps:.0f} minutes")
# Calcul des calories brûlées (approximatif)
calories_marche = total * 60 # ~60 cal/km en marchant
calories_velo = total * 30 # ~30 cal/km en vélo
print(f"\nCalories brûlées :")
print(f" - À pied : {calories_marche:.0f} kcal")
print(f" - À vélo : {calories_velo:.0f} kcal")Réflexion sur la vie privée
La géolocalisation pose des questions importantes sur la vie privée.
Questions à se poser :
- - Quelles applications ont accès à ma localisation ?
- - Que font-elles de ces données ?
- - Peut-on reconstituer mes habitudes à partir de mon historique GPS ?
- - Comment protéger ma vie privée tout en utilisant ces services ?
Bonnes pratiques :
- - Désactiver la localisation quand elle n'est pas nécessaire
- - Vérifier les autorisations des applications
- - Supprimer régulièrement l'historique de localisation
- - Ne jamais partager sa position en temps réel publiquement
Critères d'évaluation
| Critère | Points |
|---|---|
| Collecte d'au moins 5 points GPS | 3 pts |
| Calcul correct des distances (Haversine) | 4 pts |
| Carte interactive avec marqueurs | 4 pts |
| Trajet tracé sur la carte | 3 pts |
| Estimation des temps de parcours | 3 pts |
| Réflexion sur la vie privée | 3 pts |
| Total | 20 pts |
Pour aller plus loin
Variante 1 : Carte thermique
Crée une carte de chaleur de tes lieux les plus fréquentés sur une semaine.
Variante 2 : Géocaching
Crée un jeu de piste avec des coordonnées GPS à trouver.
Variante 3 : API Itinéraire
Utilise l'API OpenRouteService pour calculer les vrais itinéraires.
Variante 4 : Analyse GPX
Importe et analyse un fichier GPX enregistré lors d'une randonnée.
