|
Модераторы: Daevaorn |
|
gpepsi |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
У меня есть координаты GPS-приемника в decimal-формате.
Есть направление и расстояние. Необходимо решить прямую геодезическую задачу (найти новую точку). В геодезии ничего не понимаю, поэтому буду благодарен за объяснение либо код на C++. |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
>>В геодезии ничего не понимаю
Наверное я плохо в институте учился и нас программистов наверное с первого курса учат основам геодезии... Говорил мне папа "учись лучше в институте" не слушался ведь, пиво пил. ) |
|||
|
||||
Zerstroer |
|
|||
Опытный Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
, мне кажется, задача сводится просто к нахождению новых координат, в таком случае, не стоит заморачиваться на геодезии, используйте декартовы координаты на плоскости. Аналитическая геометрия вроде как.
-------------------- In silico |
|||
|
||||
gpepsi |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
гл тогда нужно как-то перевести географические координаты в прямоугольные, а потом назад. А вот как перевести - не совсем понятно. Вроде с GPS идет WGS84, а переводить нужно в UTM (на сколько я понял читая статью в настоящее время ) |
|||
|
||||
Zerstroer |
|
|||
Опытный Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Что именно вам возвращает GPS приёмник? Приведите значения, для примера. -------------------- In silico |
|||
|
||||
gpepsi |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
||||
|
||||
Zerstroer |
|
|||
Опытный Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
В каком виде получаете направление и расстояние? Приведите примеры, для наглядности.
-------------------- In silico |
|||
|
||||
gpepsi |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
расстояние я получаю из другого места - просто в метрах. Направление в градусах. кстати - вроде что-то нашел http://www.m0sand.com/netcode/GeoUTMConverter.cs |
|||
|
||||
Zerstroer |
|
|||
Опытный Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Вроде действительно то, что нужно. Все немного сложнее, чем ожидалось, но собственноручно повторить кажется возможным. -------------------- In silico |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Лови (давно писал, но за то проверено временем))) -
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
gpepsi |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
что-то ни один ни другой способ не дает правильных результатов.
Пусть у меня есть координаты: 55.756704, 37.6159, есть дирекционный угол = 45 и расстояние = 500м. пересчитываю x1=413138.17090900062 y1=6179869.1323119169 нахожу новые координаты
x2=413563.62267126766 y2=6180131.7933063256 перевожу в географические: 55.759136, 37.622593. Отрисовываю на google-map. Вроде расстояние похоже на правду, а вот угол не 45 градусов, а где-то 60. То есть есть либо погрешность вычислений, либо какая-то поправка. |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Чего-то не сходится. X должен быть равен
413138.17090900062 + 500 * sin( 45 ) = 413138.17090900062 + 500 * 0.707 = 413138.17090900062 + 353.55 = 413491.72090900062 а у тебя -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
gpepsi |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
я пробовал первым способом, который нашел.
Твоим способом так: 55.756704, 37.6159 x1=2353715.6242599613 y1=6200066.7948664576 x2=2354141.0760222282 y2=6200329.4558608662 и обратно: 55.75906, 37.62498 в результате расттояние не 500м, а 1км, а угол где-то 60-65 Добавлено @ 12:20 Причем проверил расстояние
получилось 498 м - для первого варианта 625 м - для второго варианта (большая погрешность) З.Ы. А вот с углом проблема и в первом и во втором случае. У меня напрвление - истенное на север от 0 до 360. Может как-то сетку карты нужно учитывать ? Это сообщение отредактировал(а) gpepsi - 4.7.2012, 12:22 |
|||
|
||||
math64 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
код borisbn не учитывает что Земля сплюснута на полюсах - вместо cos() нужно немного другую функцию, а вместо earthCircuit использовать отдельные константы для длины экватора и меридиана. Растояние должно быть небольшое, при котором кривизну поверхности можно не учитывать.
|
|||
|
||||
math64 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
ксати, без учёта приплюстости растояние между двумя точками будет
acos(sin(y1)*sin(y2)+cos(y1)*cos(y2)*cos(x1-x2)); (y - широта, x - долгота в радианах). |
|||
|
||||
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |