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

Прерывание отрисовки mapPaintToXImage

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 След.
RSS
Прерывание отрисовки mapPaintToXImage, Как прерывать отрисовку по таймауту
 
Добрый день!

Вопрос в рамках техподдержки. ПАРБ 00008-26
Использую ГИС Конструктор для Qt Designer для прибора на АРМ.

Рисую фрагмент карты. Хочу, чтобы отрисовка не занимала времени больше заданного.

Для этого
   mapSetBreakCallAndParmEx(m_hMap, break_callback, NULL);
 mapSetPaintStepEx(m_hMap, 200);
 mapPaintToXImage(m_hMap, &image_desc, 0, 0, &m_rect);
 mapSetBreakCallAndParmEx(m_hMap, NULL, NULL);


колбек такой
 long WINAPI MapLoad::break_callback(void*, long)
{
 qDebug() << "MapLoad::break_callback, t="
          << map_draw_time.elapsed();
 if (map_draw_time.elapsed() > 500)
 {
   qDebug() << "MapLoad::break_callback, timeout";
   return 1;
 }

 if (m_stop_flag)
   return 1;
 else
   return 0;
}

вывод отрисовки

MapLoad::break_callback, t= 902
MapLoad::break_callback, timeout
map_draw_time.elapsed() 1718

ВОПРОСЫ:
1) правильно ли я все делаю?
2) первый раз колбек дернулся спустя 902 мс. как сделать чтобы он вызывался через заданной мной время?
3)  между тем, как колбек вернул 1 и выходом из функции mapPaintToXImage прошло около 800 мс. Почему так?
 
Здравствуйте!

Для воспроизведения указанного поведения, пожалуйста, при возможности передайте нам данные, на которых производится отрисовка (например, на почту технической поддержки panorama@gisinfo.ru).
 

Здравствуйте!

Спасибо за ожидание!

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

Для загрузки всех открытых данных можно выполнить следующие действия:
- установить мелкий масштаба, достаточный для отображения всех открытых данных, один раз, после открытия всех данных;
- выполнить обращение к данным и восстановить исходный масштаб.

Данный поход потребует выделения большого количества ресурсов, что может быть критично для встраиваемых устройств.
Дополнительно приводим альтернативный вариант:
- использовать для мелких масштабов общую обзорную карту;
- установить границу видимости остальных данных только в крупных масштабах - когда действительно требуются достаточно детализированные данные (настроить границы видимости можно, например, с помощью MPT-проекта).

Период вызова функции обратного вызова, установленной с помощью mapSetBreakCallAndParmEx(), считается оптимальным для установки прерывания по каким-либо внешним событиям, например, по нажатию клавиши.
На текущий момент управление периодом вызова функцией обратного вызова не предусмотрено.

 
Добрый день.
При подключении к документу HMAP только локальных данных функция установленная с помощью   mapSetBreakCallAndParmControl вызывается примерно три раза в секунду (как описано в заголовочном файле).

Но если подключить к карте WMS-портал (который отвечает очень долго, к примеру, карта Google), то функция обратного вызова перестаёт вызываться, видимо, до тех пор пока не будет получен ответ от геопортала, что составляет иногда интервал времени 20-25 секунд. Почему такое происходит, запросы к геопорталу выполняются в блокирующем режиме? Как оперативно отменить отрисовку геопортала?

Иначе, если пользователь приложения удаляет геопортал из документа, и сразу же вызвать   mapCloseWMS, то происходит падение в функции отрисовки   mapPaintToXImageProL, так как она не знает о закрытии ресурса.
Поэтому выполняется отмена отрисовки (вызов 1 из функции обратного вызова) и ожидание возврата функции   mapPaintToXImageProL, чтобы вызвать   mapCloseWMS, но ждать двадцать с лишним секунд до вызова функции прерывания и не обновлять список слоёв карты - неприемлемо.
 
Добрый день.
В текущей версии функция обратного вызова вызывается только после отрисовки геопортала. В новую версию мы добавим, чтобы можно было прерывать отрисовку геопорталов через код возврата функции обратного вызова.
Изменять состав данных HMAP в момент отрисовки mapPaintToXImagePro нельзя, это приведёт к падению приложения.
 

Добрый день!
Обновленная версия ГИС Конструктор с добавленым прерыванием отрисовки геопорталов доступна для скачивания на нашем сайте (https://gisinfo.ru/download/download_linux.htm#5).

 
Добрый день, спасибо за обновление.

Пока, по первым результатам перехода на версию 15, выводится чёрное изображение вместо подложки геопорталов. Я позже посмотрю более подробно - в чём может быть проблема в моём коде.

Но сейчас, в первую очередь, есть пара вопросов к поведению функции   mapPortalMenu:
1) Исчезла рамка границ и заголовка окна у диалога выбора подключения геопорталов к карте - как в моём приложении, так и в примере mapportal из состава ГИС Панорамы;
2) Диалог стал отправлять новое сообщение в функцию обратного вызова при закрытии диалога: сообщение с code = 0x0111 (это   WM_COMMAND?) и p1 = 0x06EC. Что нужно возвращать при приёме этого сообщения, ноль? В исходных текстах Sdk есть файл qdmwina.cpp с "образцовым" обработчиком MessageHandler, но он может быть уже неактуален.
 
Добрый день.
Цитата
Пока, по первым результатам перехода на версию 15, выводится чёрное изображение вместо подложки геопорталов. Я позже посмотрю более подробно - в чём может быть проблема в моём коде.
Обновите файл настроек геопорталов на новый из инсталляции (wmslist_ru.xml)
Цитата
Исчезла рамка границ и заголовка окна у диалога выбора подключения геопорталов к карте - как в моём приложении, так и в примере mapportal из состава ГИС Панорамы;
Да, изменился внешний вид диалога.
Цитата
Диалог стал отправлять новое сообщение в функцию обратного вызова при закрытии диалога: сообщение с code = 0x0111 (это   WM_COMMAND?) и p1 = 0x06EC. Что нужно возвращать при приёме этого сообщения, ноль? В исходных текстах Sdk есть файл qdmwina.cpp с "образцовым" обработчиком MessageHandler, но он может быть уже неактуален.
Диалог отправляет сообщение о закрытие диалога CM_PAN_GEOPORTAL
Изменено: Владимир Железняков - 09.10.2023 14:41:02
 
Цитата
Диалог отправляет сообщение о закрытие диалога CM_PAN_GEOPORTAL
1) Константа CM_PAN_GEOPORTAL не объявлена в заголовочных файлах версии ГИС (по крайней мере, ГИС Конструктор для Ubuntu 20.04 последней версии 15.0.0.13).
2) Нужно просто возвращать ноль из функции обратного вызова на это сообщение?
 

Добрый день.

Для диагностики пришлите, пожалуйста, небольшой тестовый пример воспроизводящий указанное поведение.

Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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