Je suppose que c'est environ 3 ans trop tard pour l'OP, mais je suis arrivé à travers cette question en recherchant un sujet similaire, alors voici ma valeur de tuppence. Selon www.movable-type.co.uk/scripts/latlong.html, il existe 3 façons de calculer la distance à travers la surface de la Terre, du plus facile au plus complexe (et donc du moins au plus précis): approximation équirectangulaire, loi sphérique des cosinus et la formule de Haversine. Le site fournit également JavaScript. Ceci est la fonction d'approximation équirectangulaire:
function _lineDistanceC(lat1, lon1, lat2, lon2) {
var R = 6371; // km
lat1 = lat1.toRad();
lon1 = lon1.toRad();
lat2 = lat2.toRad();
lon2 = lon2.toRad();
var x = (lon2-lon1) * Math.cos((lat1+lat2)/2);
var y = (lat2-lat1);
return Math.sqrt(x*x + y*y) * R;
}
Ceci est ma tentative d'un équivalent SQL:
drop function if exists lineDistanceC;
delimiter //
CREATE FUNCTION lineDistanceC (la1 DOUBLE, lo1 DOUBLE, la2 DOUBLE, lo2 DOUBLE) RETURNS DOUBLE
BEGIN
SET @r = 6371;
SET @lat1 = RADIANS(la1);
SET @lon1 = RADIANS(lo1);
SET @lat2 = RADIANS(la2);
SET @lon2 = RADIANS(lo2);
SET @x = (@[email protected]) * COS((@[email protected])/2);
SET @y = (@lat2 - @lat1);
RETURN (SQRT((@x*@x) + (@y*@y)) * @r);
END
//
delimiter ;
Je ne sais pas la précision de cette formule est, mais le site semble très crédible et mérite une visite pour plus de détails. En utilisant les coordonnées de la question, les résultats (en kilomètres) du JavaScript et SQL ci-dessus sont 0.14834420231840376 et 0.1483442023182845, ce qui les rend identiques à une fraction de millimètre, mais pas, curieusement, les 147 mètres attendus par l'OP. Prendre plaisir.
Je suis désolé je suis nouveau à cela, mais pouvons-nous convertir ce 0.00134536240471071 au résultat attendu 147 par question? –