Supongo que es aproximadamente 3 años demasiado tarde para el OP, pero me encontré con esta pregunta mientras investigaba un tema similar, así que aquí está mi valor de tuppence.
De acuerdo con www.movable-type.co.uk/scripts/latlong.html hay 3 formas de calcular la distancia en la superficie de la Tierra, desde la más fácil hasta la más compleja (y por lo tanto de menor a mayor): aproximación equirrectangular, ley esférica de coseno y la fórmula Haversine. El sitio también proporciona JavaScript. Esta es la función para equirrectangular aproximación:
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;
}
Este es mi intento de un equivalente 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 ;
no tengo idea de cómo es exacto esta fórmula es, pero el sitio parece muy creíble y definitivamente vale la pena una visita para más detalles. Usando las coordenadas en la pregunta, los resultados (en kilómetros) del JavaScript y el SQL anteriores son 0.14834420231840376 y 0.1483442023182845, lo que los hace iguales a una fracción de milímetro, pero no, curiosamente, los 147 metros que esperaba el OP. Disfrutar.
Lo siento, soy nuevo en esto, pero ¿podemos convertir esto 0.00134536240471071 al resultado esperado 147 según la pregunta? –