Я полагаю, что для ОП уже слишком поздно на 3 года, но я столкнулся с этим вопросом, исследуя похожую тему, так что вот моя стоимость вложения.
Согласно www.movable-type.co.uk / scripts / latlong.html существует 3 способа расчета расстояния по поверхности Земли, от самых простых до самых сложных (и, следовательно, из от наименьшего к точному): равностороннее приближение, сферический закон косинусов и формула Хаверсина. Сайт также предоставляет JavaScript. Это функция для равностороннего приближения:
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;
}
Это моя попытка использовать эквивалент 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 = (@lon2-@lon1) * COS((@lat1+@lat2)/2);
SET @y = (@lat2 - @lat1);
RETURN (SQRT((@x*@x) + (@y*@y)) * @r);
END
//
delimiter ;
Я понятия не имею, насколько точна эта формула, но сайт кажется очень заслуживающим доверия и, безусловно, стоит посетить для более подробной информации. Используя координаты в вопросе, результаты (в километрах) от вышеупомянутых JavaScript и SQL равны 0,14834420231840376 и 0,1483442023182845, что делает их одинаковыми с долей миллиметра, но, как ни странно, 147 метров, которые ожидал ОП. Наслаждайтесь.