Retour aux projets
Projet SNT - Localisation

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.

2 heures
Intermédiaire
Thème : Localisation

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

1

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
Exemple de trajet : Domicile au Lycée
# 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.

2

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

3

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)")
4

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'")
5

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')
6

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")
7

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èrePoints
Collecte d'au moins 5 points GPS3 pts
Calcul correct des distances (Haversine)4 pts
Carte interactive avec marqueurs4 pts
Trajet tracé sur la carte3 pts
Estimation des temps de parcours3 pts
Réflexion sur la vie privée3 pts
Total20 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.

Pixel