Camion sur une route

Avec Google Maps, il est devenu très simple d’obtenir une distance routière ou à vol d’oiseau entre deux points. Mais lorsque l’on souhaite réaliser cette opération en masse (par exemple pour calculer un coût de transport dans un classeur Excel), le problème se complique considérablement. Explications.

Pourquoi ce n’est pas si simple ?

Pour calculer une distance routière, il n’y a pas d’autre choix que de faire appel à un service cartographique comme Google Maps, qui dispose de connecteurs API pour réaliser les calculs (par exemple en VBA sous Excel). Compliqué… Et carrément impossible lorsque l’on doit faire plusieurs milliers d’appels par seconde (comme c’est le cas lors d’un calcul de clustering par exemple).

Pour contourner ce problème, on peut donc se tourner vers la géométrie, qui nous donne des méthodes ancestrales pour calculer une distance “à vol d’oiseau” entre deux points dont les coordonnées sont connues. Vous l’avez compris, il est donc indispensable de connaître la latitude et la longitude de l’ensemble des points du problème… Mais pas de panique, ces données peuvent être obtenues à partir d’adresses postales via un service de geocoding en masse comme celui de Barylog.

Cependant, la Terre n’est pas plate… Les distances “euclidiennes” issues du théorème de Pythagore ne seront donc pas suffisantes dans toutes les situations (même si l’approximation est satisfaisante à petite échelle).

Distance par la formule de haversine

Utilisée depuis des siècles par les navigateurs, la méthode “haversine” conduit à des résultats très satisfaisants pour déterminer la distance du “grand cercle” entre deux points d’une sphère, à partir de leurs longitudes et latitudes. On supposera donc la Terre parfaitement sphérique. En réalité, elle est légèrement ellipsoïdale mais l’approximation sphérique ne conduit qu’à une erreur maximale de 0,3%.

Notons φ la latitude, λ la longitude et R le rayon de la Terre (son rayon moyen vaut 6 371 km). φ et λ doivent impérativement être en radians ; multipliez les latitudes et longitudes (exprimées en degrés décimaux) par π/180 si ce n’est pas le cas. On a alors deux points : 1 (φ1,λ1) et 2 (φ2,λ2), et on cherche la distance la plus courte entre les deux.

On obtient alors d, la distance recherchée (en km si R est en km), par :

a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)
c = 2 ⋅ atan2( √a, √(1−a) )
d = R ⋅ c

Δφ est la différence des deux latitudes et Δλ la différence des deux longitudes.

Si la fonction atan2 n’est pas disponible, c peut être obtenu par c = 2 ⋅ asin( min(1, √a) ). Attention : sur Excel, la fonction ATAN2 inverse les deux arguments.

Les calculs sont ainsi à la fois précis et rapides (200 000 appels par seconde sans problème avec une machine moderne).

Approximation du vol d’oiseau et coefficient de détour

Tout cela est très bien, mais nous n’avons calculé ici qu’une distance à vol d’oiseau. Dans le monde réel, un camion devra toujours parcourir une distance plus grande, due au réseau routier et aux obstacles rencontrés.

Pour tenir compte du fait que les détours diminuent quand la distance augmente, Gallez et Hivert (1998) adoptent la formule suivante, reprise par l’ADEME en 2003, permettant de calculer D, une estimation de la distance réelle, à partir de d, la distance à vol d’oiseau :

D = d(1,1 + 0,3exp(-d/20))

Concrètement, le coefficient est de 1,4 pour une distance à vol d’oiseau de 1 km, 1,3 pour 8 km, 1,2 pour 20 km et 1,1 au-delà de 90 km.

Voilà ! Vous savez maintenant calculer la distance entre deux lieux dans Excel ! Mais ça ira plus vite de le faire avec Barylog 😉