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.
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)
# 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) ?
