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

Мигание объекта из классификатора с помощью подсвечивания/изменения цвета

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2 3 4 След.
RSS
Мигание объекта из классификатора с помощью подсвечивания/изменения цвета
 
Воспользовался функцией mapCreateSiteSelectContext. Почему-то не подсвечиваются линейные и площадные объекты. Они и не должны подсвечиваться?
 
Уточните, пожалуйста, используемую версию ГИС Конструктор и наименование операционной системы.
 
gisdesigner 12.3.1, Ubuntu 20.04.5 LTS
 

Используемая карта Подольск содержит устаревший формат координат (в дискретах). Рекомендуем выполнить экспорт карты в формат TXF с сохранением координат в метрах и после этого выполнить импорт. Данную процедуру можно выполнить в программе ГИС-вьюер, доступной для скачивания на нашем сайте (https://gisinfo.ru/download/download.htm#5).

В более поздней версии ГИС Конструктор данная карта была исключена из состава данных инсталляции. Рекомендуем при тестировании использовать другие карты из состава инсталляции, например карту Ногинска (Data/Планы городов/Noginsk/Noginsk.sit) или топографической карту N-38 (Data/Топографические карты/N-38/N-38-2.map).

 
Провели проверку.
Для корректной отрисовки выделения необходимо установить функции отрисовки принтерно-растрового вида одним из следующих способов:
- в приложении вызвать конструктор QDMapView() перед первым обращением к данным;
- добавить реализацию и установку функции в разрабатываемом приложении (пример можно посмотреть в исходных текстах библиотеки компонентов, файл /usr/share/gisdesigner/examples/Sdk/qmapcomponents/qdmwina.cpp, конструктор QDMapViewWindow).
 

При использовании конструктора QDMapView действия по установки функций не требуется.
При разработке ГИС-приложения без использования компонента QDMapView необходимо добавить установку и реализацию функций отрисовки графических примитивов в принтерно-растровом виде:
  • установка и реализация функций отрисовки графических примитивов размещена в файле mapqtdraw.cpp исходных текстов библиотеки компонентов (/usr/share/gisdesigner/examples/Sdk/qmapcomponents);
  • информация по особенностям работы фреймворка Qt в библиотеках ГИС-ядра приведена в пункте 3.2.1 Руководства программиста.

 
Изучать весь код сложно.

Предположим, что Вы выделяете объекты через методы типа PaintSelect.

Например:
Код
 // Выделить на карте объекты, удовлетворяющие заданным условиям
 // hmap   - идентификатор открытых данных
 // hdc    - контекст устройства
 // rect   - область отображения
 // select - условия отбора объектов
 // color  - цвет, которым будут выделяться объекты на карте
 // Максимальный размер картинки, равен разрешению экрана (рабочего стола)

_MAPIMP void _MAPAPI mapPaintSelect95(HMAP hmap, HDC hdc, RECT *rect,
                                      HSELECT select, COLORREF color);


 // Выделить объект в окне карты
 // rect - координаты фрагмента карты (Draw) в изображении (Picture)
 // color  - цвет, которым будут выделяться объекты на карте

_MAPIMP void _MAPAPI mapPaintSelectObject(HMAP hMap, HDC hdc, RECT * rect, HOBJ info,
                                          COLORREF color, HPAINT hpaint);
Тогда нужно или корректно заполнить HSELECT или перебрать объекты в цикле через mapPaintSelectObject.

Объекты можно отобрать в HSELECT по коду (виду объекта), уникальному номеру на карте (конкретные экземпляры объектов),
значениям атрибутов, координат и другим свойствам.

Возможно, что Вы используете один HSELECT для разных целей.

Сначала одбираете по некоторому слою, затем выделяете по виду. Но не сбросили состояние. Тогда будет пересечение слоя и вида.

Для сбрасывания условий есть, например, методы:
Код
  // Установить доступ ко всем видам данных контекста поиска/отображения по текущей карте контекста
  // select - контекст (описание условий) поиска/отображения
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapClearSelectContext(HSELECT select);

  // Установить доступ ко всем видам данных контекста поиска/отображения для заданной карты
  // hMap   - идентификатор открытой карты,
  // hSite    - идентификатор открытой пользовательской карты,
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapClearSelectContextEx(HSELECT select, HMAP hmap, HSITE hsite);
 
Допустим, что мы хотим выделить все объекты, которые созданы при вызове некоторой функции.
Мы можем запросить уникальный номер текущего последнего объекта до вызова функции (key1) и после вызова этой функции (key2).
Тогда новые объекты будут в диапазоне от key1+1 до key2.

Мы можем выделить эти объекты через функцию:

Код
  // Установить доступ к объектам с заданными номерами
  // select  - контекст условий поиска
  // min,max - диапазон номеров поиска, начинается с 0.
  //           Если оба числа равны -1, то устанавливается
  //           доступ ко всем объектам по номерам

_MAPIMP void _MAPAPI mapSelectKey(HSELECT select, unsigned long int min, unsigned long int max);

Чтобы не искать последние объекты можно запросить будущий уникальный номер нового объекта:
Код
  // Запросить идентификатор нового объекта, который будет создан на карте следующим
  // Идентификатор созданного объекта может быть запрошен функцией mapObjectKey
  // hMap   - идентификатор открытой основной карты
  // hSite  - идентификатор открытой пользовательской карты
  // list   - номер листа (для совместимости с многолистовыми картами)
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetSiteNewObjectKey(HMAP hMap, HSITE hSite, long int list = 1);

Тогда наш диапазон будет от key1 до key2-1.
 
Коды библиотек ГИС Конструктора для всех платформ общие. Окружение библиотек разное.
Версия 12 подсветку объектов на карте выполняет функциями принтерного вида через графическую подсистему и библиотеки Qt.
Версия 14 может все рисовать внутренними средствами.

В настольной версии приложения (не ARM) подключение библиотек Qt выполняется компонентами ГИС Конструктор.
Если компоненты не применяются (в приложении на ARM),то библиотеку графики нужно подключить из приложения.
На эту тему был ответ #16 -
https://gisweb.ru/forum/messages/forum7/topic12541/message94243/12541-miganie-obekta-iz-klassifikato...
 
В приведенном мной примере вызывается конструктор QDMapView, как указано в первом способе в ответе #16, это не помогает. Раз подсвечивание отображается, в некоторых случаях даже правильно, значит, все, что надо, подключено. Мне коллеги говорили, что вы в свое время присылали нам патчи. Похоже, этот тот случай, когда требуется очередной патч.
Страницы: Пред. 1 2 3 4 След.
Читают тему (гостей: 1)



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

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