Может быть более простое решение и более правильное: периметр земли составляет 40 000 км на экваторе, около 37 000 на цикле Гринвича (или любой долготы). Таким образом:
pythagoras = function (lat1, lon1, lat2, lon2) {
function sqr(x) {return x * x;}
function cosDeg(x) {return Math.cos(x * Math.PI / 180.0);}
var earthCyclePerimeter = 40000000.0 * cosDeg((lat1 + lat2) / 2.0);
var dx = (lon1 - lon2) * earthCyclePerimeter / 360.0;
var dy = 37000000.0 * (lat1 - lat2) / 360.0;
return Math.sqrt(sqr(dx) + sqr(dy));
};
Я согласен с тем, что он должен быть настроен точно так же, как я сам сказал, что это эллипсоид, поэтому радиус, умножаемый на косинус, меняется. Но это немного точнее. По сравнению с Google Maps это значительно уменьшило ошибку.