www.map-info.ru :: Просмотр темы - Некорректный азимут при создании линии командой Create Line
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Jigil



Зарегистрирован: 15.07.2013
Сообщения: 4

СообщениеДобавлено: Пн Июл 15, 2013 6:26 pm    Заголовок сообщения: Некорректный азимут при создании линии командой Create Line Добавить ответ со ссылкой на данный текст

Помогите, пожалуйста. Команда Create Line отрисовывает линию с некорректным азимутом. Особенно это заметно, когда точки лежат приблизительно на одной линии и азимут около 90 или 270. То есть, если азимут 95, а получается визуально меньше 90. С чем связано?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Пн Июл 15, 2013 7:13 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Проекцию слоя скажите и как вы рассчитываете азимут (формулу).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Jigil



Зарегистрирован: 15.07.2013
Сообщения: 4

СообщениеДобавлено: Вт Июл 16, 2013 4:40 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

У меня основная программа работает на VBA в Acsess и запускает через батник файл MBX, которая делает выкопировку из карты с наложенной на нее линией с заданным масштабом.
В мапбейсике это первый скрипт, поэтому не понятно, что такое проекция слоя.
Азимут считается по корректной формуле, все сходится с измерениями. А вот на карте более южная точка оказывается выше, чем более северная. Помогите, пожалуйста. Объясните про проекцию.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Июл 16, 2013 7:29 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Карта состоит из слоев. Любой слой карты имеет проекцию - План-схема или земную. Я и спрашиваю, в какой проекции у вас слои. Если они в какой-нибудь земной проекции, а вычисление азимута вы производите по обычным формулам для прямоугольных координат, как описано здесь:
http://gis-lab.info/qa/aveazimuth.html
то вы конечно будете получать указанную ошибку. Т.к. слой у вас на сфере.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Jigil



Зарегистрирован: 15.07.2013
Сообщения: 4

СообщениеДобавлено: Ср Июл 17, 2013 1:44 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Азимут вычисляю по этой формуле:

Pi = 3.14159265358979
Rad = 6372795
Num = 7


lat1 = x1 * Pi / 180
lat2 = x2 * Pi / 180
long1 = y1 * Pi / 180
long2 = y2 * Pi / 180

cl1 = Cos(lat1)
cl2 = Cos(lat2)
sl1 = Sin(lat1)
sl2 = Sin(lat2)
Delta = long2 - long1
If ((x1 <> x2) Or (y1 <> y2)) Then
cdelta = Cos(Delta)
sdelta = Sin(Delta)


p1 = (cl2 * sdelta) ^ 2
p2 = ((cl1 * sl2) - (sl1 * cl2 * cdelta)) ^ 2
p3 = (p1 + p2) ^ 0.5
p4 = sl1 * sl2
p5 = cl1 * cl2 * cdelta
p6 = p4 + p5
p7 = p3 / p6
anglerad = Atn(p7)
dist = anglerad * Rad


X = (cl1 * sl2) - (sl1 * cl2 * cdelta)
y = sdelta * cl2
Z = (Atn(-y / X)) * 180 / Pi
If (X < 0) Then
Z = Z + 180
'
End If
Z = -((Z * 100 + 18000) Mod 36000 - 18000) / 100

Z = Z / 180 * Pi

Floor = Int(Z / (2 * Pi))
If Floor > Z / (2 * Pi) Then
Floor = Floor - 1
End If
anglerad2 = Z - ((2 * Pi) * Floor)
angledeg = (anglerad2 * 180) / Pi

Она учитывает кривизну земли. А где посмотреть свойства проекции слоя. Я новичок в МапБейсике.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Jigil



Зарегистрирован: 15.07.2013
Сообщения: 4

СообщениеДобавлено: Ср Июл 17, 2013 3:45 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Нашел слой, который вносил искажения на карту опытным путем. Мне сказали, что так бывает, если слои с разными проекциями попадают в один рабочий набор. Всем спасибо, но хотелось бы подвести теорию и узнать где можно посмотреть, какая у слоя проекция? Может получится подправить?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Ср Июл 17, 2013 7:00 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

В самой MapInfo непросто смотреть - меню Файл - Сохранить копию, в диалоге выбора файла есть кнопка Проекция, там видно текущую проекцию. Можно сторонними утилитами, например, Инструментарий для MapInfo отображает проекцию слоя в инструменте "Управление слоями+"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Ср Авг 07, 2013 2:56 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Андрей Могильный писал(а):
В самой MapInfo непросто смотреть - меню Файл - Сохранить копию, в диалоге выбора файла есть кнопка Проекция, там видно текущую проекцию. Можно сторонними утилитами, например, Инструментарий для MapInfo отображает проекцию слоя в инструменте "Управление слоями+"


Действительно смотреть не просто, а очень просто. Начиная с Mapinfo 6.5 в стандартных утилитах есть "Check and Set Coordsys Bounds". там все видно...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru