На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Задание поворота mtw матрице

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2 3
RSS
Задание поворота mtw матрице
 
Спасибо за ссылки
Изменено: Olgas - 22.12.2020 09:57:19
 
Добрый вечер,

Мне кое-что удалось прочитать.

То что я поняла:
1 Пересчет геодезических координат от одного эллипсоида до другого делается по формулам и в целом умею это делать.
2. Для перехода от системы высот до геодезических координат нужены данные соответствующего геоида.

Тагда вопросы.
1. Есть ли у вас функция, которая делает перевод высоты из геодезической в геодезическую другого эллипсоида, для всех эллипсоидов, поддерживаемых MTW
2. Есть ли у вас доступные данные для пересчета из балтийской системы высот в высоты Эллипсоида WGS84?
 
Повторю ответ -

Немного о высотах можно посмотреть здесь -

https://gisinfo.ru/price/price_map.htm

внизу страницы под описанием Модель геоида EGM2008.

Например,  если у Вас высота в Балтийской системе высот или в системе MSL, то она  не может быть пересчитана при смене системы координат или эллипсоида.
Она сначала должна быть переведена в геодезическую высоту. И т.д.

Открыть модель геоида можно функциями:
Код
  // Открытие матрицы (Egm2008 или другой)
  // Если имя файла не задано (mtrname равно 0), то проверяется наличие следущих
  // матриц в папке приложения:
  // egm2008_1min.mtw  (размер элемента 1 минута)
  // egm2008_2.5min.mtw (размер элемента 2.5 минуты)
  // При нахождении матрицы выполняется ее открытие
  // mtrname     - путь к открываемой модели геоида/квазигеоида (MTW) или 0
  // multithread - признак применения матрицы в потоке (если не равен 0, то открывается отдельно,
  // независимо от наличия уже открытой ранее матрицы, со своим буфером для чтения блоков)
  // Каждый поток должен иметь свой идентификатор открытой матрицы,
  // полученный с параметром multithread равным 1
  // Возвращает идентификатор открытой матрицы Egm2008
  // При ошибке возвращает 0

_MAPIMP HANDLE _MAPAPI mapOpenEgmPro(const WCHAR *mtrname, long int multithread);
_MAPIMP HANDLE _MAPAPI mapOpenEgm2008Un(const WCHAR *mtrname);
_MAPIMP HANDLE _MAPAPI mapOpenEgm2008(const char *mtrname);

  // Закрытие матрицы
  // hmtr - идентификатор открытой матрицы

_MAPIMP void _MAPAPI mapCloseEgm(HANDLE hmtr);
_MAPIMP void _MAPAPI mapCloseEgm2008(HANDLE hmtr);

  // Чтение высоты геоида/квазигеоида над поверхностью эллипсоида wgs84
  // по геодезическим координатам на эллипсоиде WGS84
  // hmtr - идентификатор открытой матрицы
  // interptype - тип интерполяциия
  //          1 - ближайший сосед
  //          2 - интерполяция по ближайшим 3 элементам
  //          3 - билинейная интерполяция по 4 ближайшим элементам
  //          4 - бикубическая интерполяция по 16 ближайшим элементам
  // b - широта точки на эллипсоиде WGS84 в радианах
  // l - долгота точки на эллипсоиде WGS84 в радианах
  // h - возвращаемая высота геоида над эллипсоидом WGS84 в метрах (поправка)
  // При переходе от геодезической высоты WGS84 к нормальной высоте (MSL)
  // необходимо вычесть полученную поправку
  // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapReadEgm(HANDLE hmtr, long int interptype, double b, double l, double *h);
_MAPIMP long int _MAPAPI mapReadEgm2008(HANDLE hmtr, long int interptype, double b, double l, double *h);

  // Запросить имя открытой матрицы
  // hmtr - идентификатор открытой матрицы
  // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapGetEgmName(HANDLE hmtr, WCHAR * name, long int size);


Преобразование высот можно выполнить, в частности, через функции:
Код
 // Преобразование нормальной высоты (MSL) к геодезической (WGS84)
 // B,L   - геодезические координаты (WGS-84) в радианах для точки, в которой пересчитывается высота
 // hegm  - идентификатор модели геоида, открытой mapOpenEgmPro
 // H     - высота в метрах
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapNormalHeightToGeoHeightWGS84(double B, double L, double *H, HANDLE hegm);

 // Преобразование геодезической (WGS84) высоты к нормальной (MSL)
 // B,L   - геодезические координаты (WGS84) в радианах для точки, в которой пересчитывается высота
 // hegm  - идентификатор модели геоида, открытой mapOpenEgmPro
 // H     - высота в метрах
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGeoHeightToNormalHeightWGS84(double B, double L, double *H, HANDLE hegm);
и т.д.
 
Спасибо за развернутый ответ. Многое стало понятно.

Но вот с этим есть момент.
Цитата
Например,  если у Вас высота в Балтийской системе высот или в системе MSL, то она  не может быть пересчитана при смене системы координат или эллипсоида.

Может у нас случится такая ситуация, что надо пересчитать высоты из одной Системы высот в другую. А если так случится, что данные соответствующих геоидов даны относительно разных эллипсоидов.
Здесь ведь один из этапов будет перевод высот от одного эллипсоида к другому?
 
Это базовые функции -
Код
 // Преобразование из геодезических координат (радианы) в пользовательской системе координат
 // в геодезические координаты в радианах (общеземной эллипсоид WGS84)
 // huser - идентификатор пользовательской системы координат
 // Bx,Ly - преобразуемые координаты, на входе радианы, на выходе - радианы
 // H     - геодезическая высота в точке (метры), пересчитывается между эллипсоидами
 // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapUserGeoToGeoWGS843D(HANDLE huser, double *Bx, double *Ly, double *H);

 // Преобразование из геодезических координат в радианах (общеземной эллипсоид WGS84)
 // в геодезические координаты в радианах на эллипсоиде в пользовательской проекции
 // huser  - идентификатор пользовательской системы координат
 // Bx,Ly  - преобразуемые координаты, на входе радианы, на выходе - радианы
 // H      - геодезическая высота в точке (метры), пересчитывается между эллипсоидами
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGeoWGS84ToUserGeo3D(HANDLE huser, double *Bx, double *Ly, double *H);

Любые пересчеты между разными системами делаются через WGS84: Система1 -> WGS84 -> Система2

Например: СК42 -> ПЗ-90.11
Код
HANDLE huser1 = mapCreateUserSystemParametersByEpsg(4284);        // Эллипсоид Красовского, датум СК-42
HANDLE huser2 = mapCreateUserSystemParametersByEpsg(7680);        // ПЗ-90.11 Широта/Долгота
// Система1 -> WGS84
mapUserGeoToGeoWGS843D(huser1, &lat, &lon, &h);
// WGS84 -> Система2
mapGeoWGS84ToUserGeo3D(huser2, &lat, &lon, &h);
mapDeleteUserSystemParameters(huser1);
mapDeleteUserSystemParameters(huser2);

При этом в

mapUserGeoToGeoWGS843D(huser1, &lat, &lon, &h);
h - ГЕОДЕЗИЧЕСКАЯ высота (не БАЛТИЙСКАЯ система высот)

Только у Вас (и у меня) нет модели геоида для Балтийской системы.
Вы можете (теоретически) найти локальные поправки с помощью геодезических работ и выполнить пересчет.

Поэтому задача, которую Вы решаете, не имеет смысла.
 
Спасибо большое!!!

Вот это я уже поняла.
Цитата
Только у Вас (и у меня) нет модели геоида для Балтийской системы.<br>Вы можете (теоретически) найти локальные поправки с помощью геодезических работ и выполнить пересчет.

Но пока это останется поводом для внутреннего обсуждения.

Мне важна теоретическая возможность
Страницы: Пред. 1 2 3
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности