Мастерская > Теория и практика
Статья: Метод быстрой фильтрации потока данных о глобальной позиции наблюдаемого объекта на примере
gogenzzo:
Спасибо. У меня и в FF так же отображает
gogenzzo:
Скажите пожалуйста, подойдет ли функция ниже, для вычисления расстояния между двумя точками (L)?
--- Код: ---function latlng2distance(lat1, long1, lat2, long2) {
//радиус Земли
var R = 6372795;
//перевод коордитат в радианы
lat1 *= Math.PI / 180;
lat2 *= Math.PI / 180;
long1 *= Math.PI / 180;
long2 *= Math.PI / 180;
//вычисление косинусов и синусов широт и разницы долгот
var cl1 = Math.cos(lat1);
var cl2 = Math.cos(lat2);
var sl1 = Math.sin(lat1);
var sl2 = Math.sin(lat2);
var delta = long2 - long1;
var cdelta = Math.cos(delta);
var sdelta = Math.sin(delta);
//вычисления длины большого круга
var y = Math.sqrt(Math.pow(cl2 * sdelta, 2) + Math.pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2));
var x = sl1 * sl2 + cl1 * cl2 * cdelta;
var ad = Math.atan2(y, x);
var dist = ad * R; //расстояние между двумя координатами в метрах
return dist
}
--- Конец кода ---
Altmer:
Проверьте, на сколько оно расходится с формулами 2.3, 2.4, 2.5 и далее sqrt(dx^2+dy^2+dz^2).
А так, замечу что Земля она не круглая, а дальнейшая ваша арифметика мне не очень понятна (понятно что x и y должны быть позицией одной точки относительно другой в плоскости заданной ими через центр, но правильно ли они вычислены сказать не могу, пока сам аналогичным образом не выведу формулы).
На самом деле не нужно вычислять дистанцию - это можно сделать покомпонентно для фильтра, но если - производительность не имеет значения, так почему бы не вычислить точно по тем формулам что указанны выше?
gogenzzo:
Попробовал вашу формулу и которую я написал выше. На небольшие расстояния обе формулы дают одинаковый результат. И так же совпадает результат с яндекс картами, измерял линейкой. Но на большие расстояния, мерил около 8000 км. Вот тут уже есть расхождения. По функции выше, результат совпадает с яндексом. А по вашей формуле получается меньше расстояние, на несколько километров. Хотя может быть у яндекса так же используется упрощенная формула, а ваша точнее измеряет.
Altmer:
Нет, указанные мной формулы меряют хорду, а ваши с яндексом дугу, поэтому на больших расстояниях последние точнее.
Но когда объект движется и часто шлет телеметрию - оно не принципиально. Еще точнее будет рассчитывать дугу по форме геоида.
Навигация
Перейти к полной версии