Il suffit de calculer l'angle de l'arc de grand cercle entre deux points :

$$\Delta\theta = 2\arcsin\sqrt{\sin^2{\left(\frac{\varphi' - \varphi}{2}\right)} + \cos{\varphi} \cdot \cos{\varphi'} \cdot \sin^2{\left(\frac{\lambda' - \lambda}{2}\right)}\ }$$

\( \varphi\) et \( \varphi'\) sont les latitudes des deux points ; \( \lambda\) et \( \lambda'\) leurs longitudes.

La longueur est alors donnée par \( R \Delta\theta \). J'ai pris la même valeur du rayon que celle choisie dans l'API Google Maps[1], la valeur du demi-grand axe de l'ellipsoïde du système WGS 84, soit \(R = 6378,137 \mathrm{~km}\).

En bonus, la fonction Python ci-dessous effectue le calcul, à partir de coordonnées exprimées en radians :

import math

def distance(fromLat, fromLon, toLat, toLon):
	radius = 6378.137
	deltaLat = toLat - fromLat
	deltaLon = toLon - fromLon
	angle = 2 * math.asin( math.sqrt( \
		math.pow(math.sin(deltaLat/2), 2) + \
		math.cos(fromLat) * math.cos(toLat) * \
		math.pow(math.sin(deltaLon/2), 2) ) )
	return radius * angle

Au final, c'est beaucoup plus simple que d'effectuer une projection, et cela fonctionne dans tous les cas !

Notes

[1] Le calcul est déjà implémenté en Javascript dans le package de géométrie sphérique de l'API Google Maps