Азимут в GPS не бьет с рассчетным

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
eLVik
Новоприбывший
Сообщения: 10
Зарегистрирован: 20 апр 2006, 12:56
Репутация: 1
Откуда: Сыктывкар

Азимут в GPS не бьет с рассчетным

Сообщение eLVik » 20 апр 2006, 14:13

Здравствуйте. Нужна Ваша помощь в уточнении/исправлении алгоритма нахождения азимута.

Исходные данные:
1) карта в системе координат СК-42 (шейпы). Параметры проекции:
Поперечная Меркатора,
Эллипсоид Красовского,
Центр. меридиан 57 (Республика Коми)
Смещение на восток: 10500000
Параметр сжатия: 1
Единицы измерения и карты: метры

2) та же карта закачанная в GPS-приемник (eTrex Vista), настроенный на выдачу координат в СК-42
DX = 24; DY = -141; DZ = -81; DA = -108; DF = 0.004808

3) географические координаты двух точек, выдаваемые GPS

Необходимо:
программно (через скрипт Avenue) определить азимут направления от первой точки ко второй

Азимут, выдаваемый GPS составляет 33 градуса,
Мой скрипт выдает 41 градус!!!

Чего я делаю не так.

СКРИПТ ПОЛУЧЕНИЯ АЗИМУТА:

Код: Выделить всё

' Порядок вызова
' azimuth = av.Run("GetAzimuth", {point1, point2})

pA = self.Get(0) ' первая точка
pB = self.Get(1) ' вторая точка

' Координаты вектора
X = pB.GetX - pA.GetX
Y = pB.GetY - pa.GetY

' Длина вектора
L = ((X*X) + (Y*Y)).Sqrt 

IF (L = 0) THEN
  Return nil
END

' Значение угла, отсчитываемого по тригонометрическому кругу
phi = (X / L).ACos.AsDegrees  

IF (Y < 0) THEN
  phi = 360 - phi
END

IF (phi <= 90) THEN
  azimut = 90 - phi
ELSE
  azimut = 450 - phi 
END  

Return azimut
ОСНОВНОЙ СКРИПТ

Код: Выделить всё


p1_Lat = 60.34602778
p1_Lon = 49.66977778
p2_Lat = 60.34644444
p2_Lon = 49.67036111

thePrj = av.GetActiveDoc.GetProjection ' Получаем проекцию вида
p1 = Point.Make(p1_Lon, p1_Lat).ReturnProjected(thePrj)
p2 = Point.Make(p2_Lon, p2_Lat).ReturnProjected(thePrj)

azimuth = av.Run("GetAzimuth", {p1, p2})
MsgBox.Info(azimuth.asString, "")


Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Сообщение Максим Дубинин » 21 апр 2006, 00:02

А теперь попробуйте использовать ваш скрипт для неспроектированных точек убрав ReturnProjected в point.make.

Тоже когда-то писали про азимут: http://gis-lab.info/qa/aveazimuth.html
пристегивайтесь, турбулентность прямо по курсу

S.E.
Интересующийся
Сообщения: 29
Зарегистрирован: 22 июн 2004, 06:38
Репутация: 0

Сообщение S.E. » 24 апр 2006, 12:06

При расчете азимута Вы считаете угол от напрвления 0, но это не магнитное направление, а направление линий километровой сетки в проекции Гаусса-Крюгера. Надо учитывать поправки на магнитный меридиан, которые можно посмотреть на любой "зеленке".
Кстати сказать, в GPS_премниках также есть установки поправок на магнитное склонение.

Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость