---
title: "Géolocaliser une photo : lire les EXIF GPS"
description: "Sortir les coordonnées GPS d'une photo prise au téléphone — en ligne de commande puis en Python. Court, pratique, sans dépendance exotique."
pubDate: 2026-05-23
lang: fr
tags: [photo, exif, gps, python, locatme]
author: "L. Benoist"
draft: false

# Bandeau technique
os: "macOS / iOS"
app: "ExifTool"
appVersion: "12.x"
context:
  - key: "Format"
    value: ".jpg / .heic"
  - key: "Sortie"
    value: "(lat, lon) décimal"
---

## Pourquoi ça nous intéresse

Une photo prise avec un téléphone moderne contient, dans ses **métadonnées
EXIF**, la position GPS du lieu de prise de vue. C'est invisible quand on
ouvre la photo dans une visionneuse, mais c'est bien là — et c'est exactement
ce que `locatme` lit quand on lui glisse un dossier de photos.

Cet article montre comment récupérer ces coordonnées soi-même, en deux lignes
de bash ou cinq lignes de Python.

## En une ligne de commande

L'outil de référence pour lire (et écrire) des EXIF s'appelle **ExifTool**.
Il est dispo partout : Mac (`brew install exiftool`), Linux (`apt install
libimage-exiftool-perl`), Windows (binaire portable depuis le site officiel).

```bash
exiftool -gpslatitude -gpslongitude -c "%.6f" ma_photo.heic
```

Le `-c "%.6f"` force la sortie en degrés décimaux (sinon ExifTool affiche
en degrés/minutes/secondes, ce qui est lisible mais pas exploitable
directement).

Pour traiter un dossier entier en une commande, on ajoute `-r` (recursive)
et un format CSV :

```bash
exiftool -r -csv -gpslatitude -gpslongitude -c "%.6f" ./photos/ > positions.csv
```

Résultat : un CSV à 3 colonnes (`SourceFile`, `GPSLatitude`, `GPSLongitude`)
prêt à être ouvert dans LocAtMe, QGIS, ou n'importe quel SIG.

## En Python (si on doit l'intégrer)

Si tu écris un script qui traite des photos, la lib `piexif` lit
directement les EXIF sans appeler ExifTool :

```python
from pathlib import Path
import piexif

def gps_from_jpeg(path: Path) -> tuple[float, float] | None:
    exif = piexif.load(str(path))
    gps = exif.get("GPS", {})
    if not gps:
        return None
    # piexif renvoie les coordonnées en (deg, min, sec) rationnels
    def to_deg(values, ref):
        d, m, s = (v[0] / v[1] for v in values)
        sign = -1 if ref in (b"S", b"W") else 1
        return sign * (d + m / 60 + s / 3600)
    lat = to_deg(gps[2], gps[1])
    lon = to_deg(gps[4], gps[3])
    return (lat, lon)
```

Limitation : `piexif` ne lit pas les **.heic** (le format iPhone par défaut
depuis iOS 11). Pour le HEIC il faut soit convertir en JPEG (`sips -s
format jpeg`), soit utiliser `pyexiv2` qui gère les deux.

## Le piège qui revient toujours

Les coordonnées dans l'EXIF sont en **WGS84** (le système GPS standard) —
c'est ce que Google Maps, OpenStreetMap et la quasi-totalité des SIG
attendent. **Pas de conversion à faire.**

En revanche, attention au champ `GPSAltitudeRef` : il vaut `0` pour
au-dessus du niveau de la mer, `1` pour en dessous. Si tu utilises
l'altitude (rare, mais ça arrive), n'oublie pas d'appliquer le signe.

> Les EXIF sont écrits par l'appareil au moment de la photo. Si la photo
> a été retransmise (WhatsApp, iMessage, Instagram…), les EXIF ont
> probablement été **strippés** au passage. Ce qui reste sur ton disque
> n'est pas toujours ce qui était à l'origine.

## Aide-mémoire

```bash
# Une photo, sortie texte
exiftool -gpslatitude -gpslongitude -c "%.6f" photo.heic

# Un dossier, sortie CSV
exiftool -r -csv -gpslatitude -gpslongitude -c "%.6f" ./photos/ > positions.csv

# Convertir HEIC → JPEG (macOS)
sips -s format jpeg ma_photo.heic --out ma_photo.jpg

# Retirer toutes les EXIF avant publication
exiftool -all= ma_photo.jpg
```

Et si tu veux juste voir tes photos sur une carte sans coder, glisse le
dossier dans [LocAtMe](/outils-en-ligne/locatme/) — il fait exactement
ça, en mode photo.
