Здравствуйте. Необходимо вычислить расстояние между двумя точками, заданными в виде координат, на поверхности планеты Земля. Как это сделать правильно? Сейчас использую следующую формулу: a = qPow(qSin((lat2 - lat1) / 2), 2) + qCos(lat1) * qCos(lat2) * qPow(qSin((lon2 - lon1) / 2), 2); result = 6371007.2 * 2 * qAtan(qSqrt(a) * qSqrt(1 - a)); Где lat1, lon1, lat2, lon2 заданы в радианах. Работает правильно только на небольших расстояниях. Стоит задача найти координату точки находящейся на линии, соединяющий две другие точки в пространстве, и находящейся на известном расстоянии от одной из них (и, соответственно, от другой :-). Подскажите, пожалуйста, как это сделать? Сейчас думаю делать так. Строить два прямоугольных треугольника (один катет – по широте, другой – по долготе, для каждого треугольника один из катетов соответствует искомой координате). Находить угол между вектором, соединяющим две исходные точки и вектором, соответствующим катету треугольника, находить другой угол. Зная углы и длину гипотенузы, находить катеты. Зная, на каком расстоянии от первой исходной точки, находится точка, являющаяся тупым углом треугольника и, соответственно, широта или долгота исходной точки, аналогичным образом, на втором треугольнике, находится другая хараткеристика искомой точки. Насколько правильное данное решение? Спасибо. UPD: Простите, только сейчас заметил песочницу. Если вопросу место там, прошу модераторов перенести. UPD2: сам я программист.
Давайте Вы сначала расскажете, зачем это надо, а затем, в соответствии с необходимой точностью, Вам подскажут
Например, данный метод на расстояниях Москва→Магадан выдаёт погрешность в пару тысяч километров (проверялось с помощью карт Яндекса). На таких расстояниях погрешность в сотню метров была бы приемлемой. В пределах региона приведённая формула работает корректно.
Желательно, на любые. Погрешность в пределах 5 процентов будет допустимой. Сложность реализации в данном контексте не имеет абсолютно решающего значения. Пренебречь геоидной формой земли допустимо, можно рассчитывать в эллипсоидальной системе координат.
Ну, 1:20 - это совсем уж не геодезическая точность и для этого не только но и об можно не вспоминать. Вполне достаточно сферы. Вы формулу длины дуги на сфере знаете? Кстати, если всё же надо точность повыше, чем Вы указали, то почитайте, что такое геодезическая линия. Будут вопросы, задавайте. Обнаружил ещё одну Вашу тему и их соединил. Как мне кажется так для всех будет проще. Вы, когда изучали сферическую геометрию (или программисты так глубоко в математику не вникают?), то Вам не говорили, что в сферическом треугольнике сумма его углов больше или меньше 180º, т.е., в любом случае, не равна 180º?
Спасибо, что объединили. Но. Касательно этого вопроса. Расстояния в пределах 500 метров. Сферическую геометрию не изучал.
Ну, вот это другое дело. Постепенно, "подпольщик" начинает говорить. Не исключено, что ещё через некоторое время "страшная тайна": откроется и задача окажется простейшей, никак не сравнимой с вычислением геодезической линии на референц-эллипсоиде с точностью до миллиметров, как это показалось изначально. Даже расстояние в 500м можно определять с разной точностью. Посмотрите: http://geodesist.ru/forum/threads/Основы-науки-геодезии.15244/ там сумма углов в треугольнике равна 270º.
Да, ну!!!??? Это только геодезисты пользуются выпуклыми сферами, но есть ещё и псевдосферы, где сумма углов в треугольнике всегда меньше 180º.
Пожалуйста приведите пример или ссылочку. Вполне допускаю возможность существования оных сфер в псевдогеодезии. Кстати, давайте тогда зарезервируем для таких случаев понятие: сферический недостаток, по аналогии со сферическим избытком.
Vladimir VV, А это разве не вытекает из смысла неевклидовой геометрии, где поверхность постоянной кривизны отрицательная?
Конечно. У них сумма углов в треугольнике может быть равна 0º. http://ru.wikipedia.org/wiki/Псевдосфера http://www.rae.ru/monographs/102-3552
2 39dotyt, Кошерная библиотека для решения вашей задачи находится по адресу: GeographicLib . Там же ссылки на теорию. На всякий случай повторю их. http://link.springer.com/article/10.1007/s00190-012-0578-z http://arxiv.org/pdf/1102.1215v1.pdf На страничках GPS-ToolBox есть C++ and Java Code for Geodesic and Meridian Arc Computations -- by Klaus Hehl Чуть попроще, чуть-чуть медленнее (что совершенно незаметно на практике) чем GeographicLib. Это некорректное сравнение. В высшей степени некорректное. З.Ы. Исходную формулу гаверсинуса (сферическая тригонометрия в чистом виде) можно существенно уточнить, применив теорию Гаусса конформного отображения эллипсоида на шар. На участке 10°х10° ошибка вычисления длины не превосходит 5 мм. В сети есть статья Mercedes Bermejo-Solera и Jesús Otero "Global optimization of the Gauss conformal mappings of an ellipsoid to a sphere"