Coordonnées géographiques

Comment indiquer précisément un point sur Terre ? Avec deux nombres : la latitude et la longitude ! C'est l'adresse GPS universelle.

Difficulté:
20 min
+20 XP

Objectifs du cours

  • Comprendre ce qu'est la latitude et la longitude
  • Savoir lire des coordonnées géographiques
  • Connaître le système de coordonnées GPS (WGS84)
  • Comprendre l'altitude et les systèmes de référence
  • Savoir convertir entre différents formats de coordonnées

Erreurs courantes à éviter

  • Confondre latitude et longitude
  • Oublier que la latitude va de -90° à +90° (pas 180°)
  • Penser que l'altitude est toujours par rapport au niveau de la mer
  • Ne pas comprendre les formats DMS vs DD (degrés/minutes/secondes vs décimal)

**Repérer un point sur la Terre**

Pour localiser n'importe quel point sur Terre, on utilise un système de **coordonnées géographiques**.

🌍 **La Terre : une sphère (approximativement)**

En réalité, la Terre est un **ellipsoïde** : • Légèrement aplatie aux pôles • Rayon équatorial : ~6 378 km • Rayon polaire : ~6 357 km • Différence : ~21 km

**Système de référence WGS84** : • **WGS** = World Geodetic System • Version de 1984 (la plus utilisée) • Utilisé par le GPS américain • Définit précisément la forme de la Terre

📐 **Les deux coordonnées principales**

Pour repérer un point, il faut **2 nombres** :

**1. Latitude (Nord-Sud)** : • Mesure la distance au Nord ou au Sud de l'équateur • Symbole : φ (phi) ou lat • Unité : degrés (°) • Plage : **-90° à +90°**

**2. Longitude (Est-Ouest)** : • Mesure la distance à l'Est ou à l'Ouest du méridien de Greenwich • Symbole : λ (lambda) ou lon • Unité : degrés (°) • Plage : **-180° à +180°**

🧭 **Latitude : la distance à l'équateur**

**L'équateur** : • Ligne imaginaire qui fait le tour de la Terre • Divise la Terre en deux hémisphères • Latitude = **0°**

**Direction Nord** : • Du pôle Nord : **+90°** (ou 90° N) • Paris : **+48.85°** (ou 48.85° N) • Positive au Nord de l'équateur

**Direction Sud** : • Du pôle Sud : **-90°** (ou 90° S) • Sydney : **-33.87°** (ou 33.87° S) • Négative au Sud de l'équateur

**Lignes de latitude** (parallèles) : • Cercles parallèles à l'équateur • Le tropique du Cancer : 23.43° N • Le tropique du Capricorne : 23.43° S • Le cercle polaire arctique : 66.56° N • Le cercle polaire antarctique : 66.56° S

📍 **Longitude : la distance au méridien de Greenwich**

**Méridien de Greenwich** : • Passe par l'observatoire de Greenwich (Londres) • Longitude = **0°** • Choisi par convention internationale (1884)

**Direction Est** : • Tokyo : **+139.69°** (ou 139.69° E) • Positive à l'Est de Greenwich

**Direction Ouest** : • New York : **-74.01°** (ou 74.01° W) • Négative à l'Ouest de Greenwich

**Antiméridien** : • À l'opposé de Greenwich • Longitude : **±180°** • Traverse le Pacifique • Proche de la ligne de changement de date

**Lignes de longitude** (méridiens) : • Demi-cercles qui passent par les pôles • Tous les méridiens se rejoignent aux pôles • Espacement variable selon la latitude

🗺️ **Exemples de coordonnées célèbres**

**Paris (Tour Eiffel)** : • Latitude : 48.8584° N (ou +48.8584°) • Longitude : 2.2945° E (ou +2.2945°) • Notation courte : (48.8584, 2.2945)

**New York (Statue de la Liberté)** : • Latitude : 40.6892° N • Longitude : 74.0445° W (ou -74.0445°) • Notation : (40.6892, -74.0445)

**Sydney (Opéra)** : • Latitude : 33.8568° S (ou -33.8568°) • Longitude : 151.2153° E • Notation : (-33.8568, 151.2153)

**Pôle Nord** : • Latitude : 90° N • Longitude : indéfinie (tous les méridiens se rejoignent)

**Pôle Sud** : • Latitude : 90° S • Longitude : indéfinie

**Équateur sur le méridien de Greenwich** : • Latitude : 0° • Longitude : 0° • Golfe de Guinée (océan Atlantique)

⚙️ **Formats de coordonnées**

**1. Degrés décimaux (DD)** : • Format le plus simple • Un seul nombre avec décimales • Exemple : 48.8584° • Utilisé par les GPS modernes • Format : +/-DDD.DDDDD

**2. Degrés Minutes Secondes (DMS)** : • Format traditionnel • 1° = 60 minutes (60') • 1' = 60 secondes (60") • Exemple : 48° 51' 30.24" N • Format : DD° MM' SS.SS" [N/S/E/W]

**3. Degrés Minutes décimales (DMM)** : • Format intermédiaire • Minutes avec décimales • Exemple : 48° 51.504' N • Format : DD° MM.MMM' [N/S/E/W]

**Conversion DMS → DD** :

Formule : DD = D + M/60 + S/3600

Exemple : 48° 51' 30.24" N = 48 + 51/60 + 30.24/3600 = 48 + 0.85 + 0.0084 = **48.8584°**

**Conversion DD → DMS** :

1. Partie entière = degrés : 48° 2. Partie décimale × 60 = minutes : 0.8584 × 60 = 51.504' 3. Partie décimale des minutes × 60 = secondes : 0.504 × 60 = 30.24"

Résultat : **48° 51' 30.24"**

🔢 **Précision des coordonnées**

Plus il y a de décimales, plus c'est précis :

**Nombre de décimales → Précision** :

• **0 décimale** (48°) : ±111 km • **1 décimale** (48.8°) : ±11.1 km • **2 décimales** (48.85°) : ±1.1 km • **3 décimales** (48.858°) : ±111 m • **4 décimales** (48.8584°) : ±11.1 m • **5 décimales** (48.85840°) : ±1.1 m • **6 décimales** (48.858400°) : ±11 cm

**GPS standard** : 5-6 décimales (précision métrique)

Python
# Manipulation de coordonnées géographiques

class Coordonnees:
    def __init__(self, latitude, longitude):
        """Initialise des coordonnées en degrés décimaux."""
        if not (-90 <= latitude <= 90):
            raise ValueError("La latitude doit être entre -90° et +90°")
        if not (-180 <= longitude <= 180):
            raise ValueError("La longitude doit être entre -180° et +180°")

        self.latitude = latitude
        self.longitude = longitude

    def __str__(self):
        """Affichage formaté."""
        lat_dir = "N" if self.latitude >= 0 else "S"
        lon_dir = "E" if self.longitude >= 0 else "W"
        return f"({abs(self.latitude):.4f}° {lat_dir}, {abs(self.longitude):.4f}° {lon_dir})"

    def vers_dms(self):
        """Convertit en format DMS (Degrés Minutes Secondes)."""
        def dd_vers_dms(valeur):
            degres = int(abs(valeur))
            minutes_decimal = (abs(valeur) - degres) * 60
            minutes = int(minutes_decimal)
            secondes = (minutes_decimal - minutes) * 60
            return degres, minutes, secondes

        lat_d, lat_m, lat_s = dd_vers_dms(self.latitude)
        lon_d, lon_m, lon_s = dd_vers_dms(self.longitude)

        lat_dir = "N" if self.latitude >= 0 else "S"
        lon_dir = "E" if self.longitude >= 0 else "W"

        return {
            'latitude': f"{lat_d}° {lat_m}' {lat_s:.2f}" {lat_dir}",
            'longitude': f"{lon_d}° {lon_m}' {lon_s:.2f}" {lon_dir}"
        }

    @staticmethod
    def depuis_dms(degres, minutes, secondes, direction):
        """Crée des coordonnées depuis le format DMS."""
        dd = degres + minutes/60 + secondes/3600
        if direction in ['S', 'W']:
            dd = -dd
        return dd

# Exemples de lieux célèbres
print("=== COORDONNÉES DE LIEUX CÉLÈBRES ===\n")

lieux = [
    ("Paris (Tour Eiffel)", 48.8584, 2.2945),
    ("New York (Statue Liberté)", 40.6892, -74.0445),
    ("Sydney (Opéra)", -33.8568, 151.2153),
    ("Tokyo (Tour Tokyo)", 35.6586, 139.7454),
    ("Le Caire (Pyramides)", 29.9792, 31.1342),
    ("Rio (Christ Rédempteur)", -22.9519, -43.2105)
]

for nom, lat, lon in lieux:
    coord = Coordonnees(lat, lon)
    dms = coord.vers_dms()

    print(f"{nom}:")
    print(f"  Format DD:  {coord}")
    print(f"  Format DMS: {dms['latitude']}, {dms['longitude']}")
    print()

# Conversion DMS → DD
print("\n=== CONVERSION DMS → DEGRÉS DÉCIMAUX ===\n")

print("Exemple: 48° 51' 30.24" N")
lat_dd = Coordonnees.depuis_dms(48, 51, 30.24, 'N')
print(f"Résultat: {lat_dd:.6f}°\n")

print("Détail du calcul:")
print("  48 + 51/60 + 30.24/3600")
print(f"  = 48 + 0.85 + 0.0084")
print(f"  = {lat_dd:.6f}°")

# Précision des coordonnées
print("\n\n=== PRÉCISION DES COORDONNÉES ===\n")

coord_base = Coordonnees(48.858400, 2.294500)

precisions = [
    (0, 111000, "48°, 2°"),
    (1, 11100, "48.8°, 2.2°"),
    (2, 1110, "48.85°, 2.29°"),
    (3, 111, "48.858°, 2.294°"),
    (4, 11.1, "48.8584°, 2.2945°"),
    (5, 1.1, "48.85840°, 2.29450°"),
    (6, 0.11, "48.858400°, 2.294500°")
]

print(f"{'Décimales':<12} {'Précision':<20} {'Exemple':<25}")
print("-" * 60)

for decimales, precision_m, exemple in precisions:
    if precision_m >= 1000:
        prec_str = f"±{precision_m/1000:.1f} km"
    elif precision_m >= 1:
        prec_str = f"±{precision_m:.1f} m"
    else:
        prec_str = f"±{precision_m*100:.0f} cm"

    print(f"{decimales:<12} {prec_str:<20} {exemple:<25}")

print("\n→ GPS standard: 5-6 décimales (précision 1-10 mètres)")

# Points particuliers
print("\n\n=== POINTS PARTICULIERS SUR TERRE ===\n")

points = [
    ("Pôle Nord", 90.0, 0.0, "(longitude indéfinie)"),
    ("Pôle Sud", -90.0, 0.0, "(longitude indéfinie)"),
    ("Équateur / Greenwich", 0.0, 0.0, "(Golfe de Guinée)"),
    ("Équateur / Antiméridien", 0.0, 180.0, "(Océan Pacifique)"),
]

for nom, lat, lon, note in points:
    print(f"{nom}:")
    print(f"  Latitude:  {lat:+.1f}°")
    print(f"  Longitude: {lon:+.1f}°")
    print(f"  Note: {note}")
    print()

# Validation de coordonnées
print("=== VALIDATION DE COORDONNÉES ===\n")

coordonnees_test = [
    (48.8584, 2.2945, True, "Paris - Valide"),
    (100.0, 50.0, False, "Latitude > 90° - Invalide"),
    (45.0, 200.0, False, "Longitude > 180° - Invalide"),
    (0, 0, True, "Golfe de Guinée - Valide"),
    (-90, 0, True, "Pôle Sud - Valide")
]

for lat, lon, valide, description in coordonnees_test:
    symbole = "✅" if valide else "❌"
    try:
        coord = Coordonnees(lat, lon)
        statut = "VALIDE"
    except ValueError as e:
        statut = f"INVALIDE: {e}"

    print(f"{symbole} ({lat:+.1f}, {lon:+.1f}) → {description}")

# Formats d'affichage courants
print("\n\n=== FORMATS D'AFFICHAGE COURANTS ===\n")

coord = Coordonnees(48.8584, 2.2945)
dms = coord.vers_dms()

print("Coordonnées de la Tour Eiffel:\n")
print(f"Format DD (décimal):     {coord.latitude:.4f}, {coord.longitude:.4f}")
print(f"Format DD avec signe:    {coord.latitude:+.4f}, {coord.longitude:+.4f}")
print(f"Format DD direction:     {abs(coord.latitude):.4f}° N, {abs(coord.longitude):.4f}° E")
print(f"Format DMS:              {dms['latitude']}, {dms['longitude']}")
print(f"Format Google Maps:      48.8584, 2.2945")
print(f"Format copier-coller:    48.8584, 2.2945")

Quiz de validation

1. Quelle est la plage de valeurs de la latitude ?

2. Que représente une longitude de 0° ?

3. Combien de mètres représente environ 1° de latitude ?

4. Quelle précision obtient-on avec 5 décimales en degrés décimaux ?

5. Quelle est l'altitude du point le plus bas sur terre émergée (Mer Morte) ?

EdTech AI Assistant