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

MTW

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
MTW, Работа с MTW файлами
 
Здравствуйте.

Имеется несколько MTW файлов.
Читаю данные из этих файлов с помощью GDAL (https://www.gdal.org), используя язык программирования С++.
Было обнаружено, что координаты каждого пикселя из матрицы MTW различаются с координатами из ГИС ПАНОРАМЫ 12 для СК WGS 84 в градусах. Более того, получаю разные результаты в ГИС ПАНОРАМЕ 12 и в QGIS.

Скажите, пожалуйста, как прочитать MTW файл с помощью GIS ToolKit?
Скажите, пожалуйста, как получить все метаданные из файла (bounding box, СК, проекцию, координату каждого пикселя, высоту)?
Скажите, пожалуйста, как затем перевести эти координаты в WGS 84, используя GIS ToolKit?
Исходная система координат: Pulkovo 1942. Но для разных MTW СК отличается.

Из изученного API GIS Toolkit смог найти только _MAPIMP HMAP _MAPAPI mapOpenMtr(const char *mtrname, long int mode = 0);
 
                  Как прочитать MTW файл с помощью GIS ToolKit (mtrapi.h)
                 -----------------------------------------------------------------------------------

Запросить описание файла матричных данных - mapGetMtrDescribeUn
В структуре описания имеется габаритная рамка матрицы в метрах MTRDESCRIBEUN.FrameMeters
Можно читать высоты по координатам в метрах

// Выбор значения абсолютной высоты в заданной точке.
mapGetHeightValue(HMAP hMap,double x, double y);

// Выбор значения абсолютной высоты в заданной точке из
// матрицы с наименьшим размером элемента (более точной)
mapGetPrecisionHeightValue(HMAP hMap, double x, double y);

// Расчет абсолютной высоты методом треугольников в заданной точке
mapGetPrecisionHeightTriangle(HMAP hMap, double x, double y);

 // Возвращает интерполированную высоту в заданной точке
 // hMap   - идентификатор открытой основной карты
 // number - номер матрицы высот в цепочке
 // interptype - тип интерполяции
 //              1 - ближайший сосед
 //              2 - интерполяция по ближайшим 3 элементам
 //              3 - билинейная интерполяция по 4 ближайшим элементам
 //              4 - бикубическая интерполяция по 16 ближайшим элементам
 // x, y - координаты точки в метрах
 // h    - возвращаемое значение в метрах (при ошибке устанавливается ERRORHEIGHT)
 // При ошибке возвращает 0
 mapGetHeightValueOfMtrEx(HMAP hMap, long int number,long int interptype,
                          double x, double y, double *h);

 // Расчет среднего значения абсолютной высоты по высотам квадратной области
 // Функция может использоваться для создания матрицы обобщенного рельефа
 // xcenter, ycenter - координаты центра области в метрах
 // size - размер стороны области в метрах (размер элемента матрицы обобщенного рельефа)
 // Возвращает среднее значение высоты в метрах
 // В случае ошибки при выборе высот и в случае необеспеченности
 // заданной области матричными данными возвращает ERRORHEIGHT
 mapGetGeneralHeight(HMAP hMap, double xcenter,
                     double ycenter, double size);

 // Выбор массива значений абсолютных высот, соответствующих
 // логическим элементам, лежащим на заданном отрезке.
 // hMap   - идентификатор открытой основной векторной карты
 // Координаты точек, задающих начало и конец отрезка
 // (FirstPoint,SecondPoint) задаются в метрах в системе
 // координат векторной карты.
 // Размер массива высот, заданного адресом HeightArray,
 // должен соответствовать запрашиваемому количеству высот
 // (HeightCount), в противном случае возможны ошибки работы
 // с памятью.
 // В случае необеспеченности логического элемента матричными
 // данными его значение равно ERRORHEIGHT (-111111.0 м)
 // В случае ошибки при выборе высот возвращает ноль
 mapGetHeightArray(HMAP hMap, double *HeightArray,
                   long int HeightCount,
                   const DOUBLEPOINT *FirstPoint,
                   const DOUBLEPOINT *SecondPoint);



       Можно также читать высоты по индексам элементов матрицы
       ---------------------------------------------------------------------------------------

 // Чтение элемента матрицы высот по абсолютным индексам
 // hMap   - идентификатор открытой карты
 // number - номер файла в цепочке
 // value  - полученное значение элемента в метрах
 //          (при отсутствии высоты равно ERRORHEIGHT)
 // string - индекс строки матрицы (значение от 0 до height-1, где height - высота
 //          матрицы элементах, запрашиваемая функцией mapGetMtrHeightInElement)
 // column - индекс колонки матрицы (значение от 0 до width-1, где width - ширина
 //          матрицы элементах, запрашиваемая функцией mapGetMtrWidthInElement)
 // hPaint - контекст поддержки многопоточного вызова (см. mapCreatePaintControl) или 0
 // При ошибке и при отсутствии высоты возвращает ноль

 mapGetMtrPoint(HMAP hMap, long int number, double *value,
                long int string, long int column);


       Для преобразования координат можно использовать функции
       ---------------------------------------------------------------------------------------

 // Запрос - поддерживается ли пересчет к геодезическим
 // координатам из плоских прямоугольных и обратно
 // hMap     - идентификатор открытой основной карты
 // number   - номер файла в цепочке
 // Если нет - возвращает ноль
 _MAPIMP long int _MAPAPI mapIsMtrGeoSupported(HMAP hMap, long int number);

 // Запросить данные о проекции матрицы
 // hMap   - идентификатор открытой основной векторной карты
 // number - номер файла в цепочке
 // projectiondata - адрес структуры, в которой будут размещены
 // данные о проекции
 // Структурa MTRPROJECTIONDATA описанa в maptype.h
 // ttype  - тип локального преобразования координат (см. TRANSFORMTYPE в mapcreat.h) или 0
 // tparm - параметры локального преобразования координат (см. mapcreat.h)
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetMtrProjectionDataPro(HMAP hMap, long int number,
                                                   MAPREGISTEREX* mapregister,
                                                   DATUMPARAM     *datumparam,
                                                   ELLIPSOIDPARAM *ellipsoidparam,
                                                   long int * ttype,
                                                   LOCALTRANSFORM * tparm);

   Далее можно применить функции преобразования координат (mapapi.h)
   ------------------------------------------------------------------------------------------------------

       получаем HANDLE:

// Установить текущие параметры пользовательской системы координат
_MAPIMP HANDLE _MAPAPI mapCreateUserSystemParametersPro(MAPREGISTEREX * parm,
                                                       DATUMPARAM * datum,
                                                       ELLIPSOIDPARAM * ellipsoid,
                                                       long int ttype,
                                                       LOCALTRANSFORM * tparm);
     применяем HANDLE:

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

_MAPIMP long int _MAPAPI mapUserGeoToGeoWGS84(HANDLE huser, double *Bx, double *Ly);
Изменено: Александр Горбунов - 10.04.2019 18:30:14
Страницы: 1
Читают тему (гостей: 1)



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

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