Guides

Calculer la distance entre deux points géocodés

La distance entre deux adresses n'est pas une donnée qu'une API de géocodage renvoie directement, car un calcul de distance n'a besoin que de coordonnées, que l'endpoint de géocodage direct vous fournit déjà pour toute adresse que vous lui envoyez.

Obtenir les coordonnées des deux adresses

Géocodez chaque adresse séparément, ou les deux ensemble dans une seule requête groupée, pour obtenir un couple latitude et longitude pour chacune.

POST /v1/forward
Content-Type: application/json

["221B Baker Street, London", "10 Downing Street, London"]
{
  "status": "ok",
  "results": [
    {"formatted": "221B Baker Street, London, UK", "lat": 51.5237, "lon": -0.1585, "type": "address", "precision": "house", "confidence": 0.95, "place_id": "abc123", "components": {}},
    {"formatted": "10 Downing Street, London, UK", "lat": 51.5033, "lon": -0.1276, "type": "address", "precision": "house", "confidence": 0.96, "place_id": "op678", "components": {}}
  ]
}

Calculer la distance

Avec deux couples de coordonnées en main, appliquez la formule de haversine standard, qui convertit la différence de latitude et de longitude en distance en ligne droite à la surface de la Terre. La plupart des langages de programmation disposent d'une petite implémentation de haversine bien testée, sous forme de fonction courte ou de bibliothèque courante : inutile donc d'écrire la trigonométrie vous-même.

distance_km = haversine(51.5237, -0.1585, 51.5033, -0.1276)

Une erreur courante à éviter

La formule de haversine attend la latitude et la longitude en radians, mais les coordonnées d'une réponse d'API sont toujours exprimées en degrés. Injecter directement des valeurs en degrés dans une formule écrite pour des radians donnera une distance qui paraît plausible au premier abord mais qui est discrètement fausse d'un facteur important. Convertissez d'abord les degrés en radians, ou utilisez une fonction de bibliothèque qui indique l'unité attendue, et comparez le résultat à une distance que vous connaissez déjà avant de vous y fier en production.

Deuxième exemple : la longueur totale d'un itinéraire à plusieurs arrêts

Le même calcul s'étend naturellement à plus de deux points. Géocodez chaque arrêt d'un itinéraire dans une seule requête groupée, puis additionnez la distance de haversine entre chaque paire de coordonnées consécutives pour obtenir une longueur totale approximative de l'itinéraire, utile pour estimer rapidement une tournée de livraison avant même de disposer d'un vrai calcul d'itinéraire détaillé.

total_km = haversine(a, b) + haversine(b, c) + haversine(c, d)

Distance en ligne droite ou distance de trajet

Un calcul de haversine donne une distance en ligne droite, pas une distance en voiture ou à pied par les routes réelles. Pour la plupart des usages, comme trier des lieux proches ou estimer une proximité approximative, la distance en ligne droite suffit et ne nécessite rien d'autre que les coordonnées dont vous disposez déjà. Si vous avez spécifiquement besoin d'une distance de trajet calculée sur un itinéraire, il s'agit d'un autre type de calcul, qui dépasse ce que fournit une recherche de géocodage.

Un cas limite à connaître

Deux points situés de part et d'autre de l'antiméridien, ou très près d'un pôle, peuvent tromper une formule de distance naïve qui ne tient pas compte du passage de la longitude de 180 à moins 180. C'est rare pour des vérifications classiques de distance entre adresses, mais cela vaut la peine d'être testé si votre application couvre réellement cette partie du globe.

Le coût en requêtes

Géocoder deux adresses coûte deux requêtes, qu'elles soient envoyées en appels séparés ou en un seul appel groupé. Le calcul de distance lui-même, une fois les deux couples de coordonnées obtenus, se fait entièrement dans votre propre code et ne coûte rien de plus sur votre quota.

Réutiliser les coordonnées dont vous disposez déjà

Si l'une des deux adresses a déjà été géocodée et mise en cache, seule la nouvelle adresse nécessite une nouvelle requête, ce qui réduit le coût de ce calcul à une requête au lieu de deux.

Un calcul de distance n'est qu'à une requête de géocodage pour toute adresse que vous n'avez pas encore convertie en coordonnées. Consultez la documentation du géocodage direct pour la structure complète de la réponse.