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

Формирование битовой карты области матрицы высот.

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Формирование битовой карты области матрицы высот.
 
Добрый день. Есть ли возможность использовать функцию mapPaintToXImageEx() (или аналог) применительно к матрице высот(.mtw), но вместо битовой карты цветов получать битовую карту значений высот в прямоугольнике, заданном в пикселах на изображении?  
 

Здравствуйте!
Для получения фрагмента матрицы высот с указанием габаритов фрагмента можно использовать API-функции mapGetMtrFrame (mtrapi.h) или mapGetPrecisionHeightFrame (mtrapi.h).

 

Код
 // Чтение прямоугольного участка матрицы в заданную область памяти
 // hMap -  идентификатор открытых данных
 // number - номер матрицы в списке открытых матриц
 // bits - указатель на начало области памяти
 // left - смещение участка матрицы слева (в элементах)
 // top - смещение участка матрицы сверху (в элементах)
 // width - ширина участка матрицы (в элементах)
 // height - высота участка матрицы (в элементах)
 // widthinbyte - ширинa участка матрицы в байтах
 // Размер участка, заданного адресом bits, должен быть не менее
 // (width * height * размер элемента матрицы в байтах),
 // в противном случае возможны ошибки работы с памятью.
 // Запрос размера элемента матрицы в байтах - функция mapGetMtrElementSize.
 // Высоты участка записываются в область bits в единицах измерения
 // значений высот данной матрицы.
 // Запрос единицы измерения значений высот матрицы - функция mapGetMtrMeasure.
 // При ошибке возвращает ноль


 _MAPIMP long int _MAPAPI mapGetMtrFrame(HMAP hMap, long int number, char *bits,
                                        long int left, long int top,
                                        long int width, long int height,
                                        long int widthinbyte = 0);

 // Вычисление значения массива элементов с применением метода треугольников    
 // по матрицам высот (применяется для обработки OGC WCS-запросов)
 // hmap   - идентификатор документа, содержащего открытые матрицы высот (MTW)
 // matrix - указатель на буфер выходной матрицы 4-ех байтовых целочисленных элементов
 // width  - ширина выходной матрицы (число элементов в строке)
 // hight  - высота выходной матрицы (число строк)
 // unit   - единица измерения высоты в матрице (0 - метры, 1 - дециметры, 2 - сантиметры, 3 - миллиметры)
 // dframe - габариты матрицы на местности в системе координат матрицы (и документа)
 //          от юго-западного элемента матрицы до северо-восточного
 // minvalue - поле для записи минимального значения элемента в выходной матрице
 // maxvalue - поле для записи максимального значения элемента в выходной матрице
 // hpaint - контекст поддержки многопоточного вызова (см. mapCreatePaintControl)
 // В случае необеспеченности заданной точки матричными данными в элемент записывается ERRORHEIGHT (-111111)
 // При ошибке возвращает ноль


 _MAPIMP long int _MAPAPI mapGetPrecisionHeightFrame(HMAP hmap, int * matrix, long int width, long int hight,
                                                    long int unit, DFRAME * dframe,
                                                    long int * minvalue, long int * maxvalue, HPAINT hpaint);

 
Насколько я понимаю, функция mapGetMtrFrame() не имеет ничего общего с областью отображения. Она просто возвращает массив высот в элементах матрицы по заданным параметрам. Для отождествления этого массива с изображением в пикселах я должен выполнить кучу преобразований и в итоге получить совершенно другой массив.
Функция mapGetPricisionHeightFrame() выполняет именно то, что и ожидается: возвращает массив высот внутри описываемого прямоугольника в СК матрицы(метры).
Я провел тестирование двух функций: mapPaintToXImageEx() и mapGetPrecisionHeightFrame(). В качестве входных параметров использовал одни и те же данные, размер массива формирования также одинаковый. Время выполнения функции mapPaintToXImageEx() составило ~ 13 мс, время выполнения функции mapGetPrecisionHeightFrame() - 134 мс!!! Почему функция, ради которой в принципе и нужна матрица высот, выполняется в 10 раз медленнее чем функция, созданная для графического отображения данных? И как достичь такой же скорости формирования массива высот для области отображения на экране?
Страницы: 1
Читают тему (гостей: 1)



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

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