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

Компоненты Qt Designer

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2 3
RSS
Компоненты Qt Designer
 
Цитата
Денис Вицко написал:
Можно увидеть код того, как у Вас реализовано "инициализация карты и ситов, создаётся структура данных, содержащая те самые сотни тысяч объектов"?
К сожалению довольно сложно отделить готовый функционал от проекта, попутно эмулировать механизм добавление данных из базы.
 

Компонент QDMapObj является графическим компонентом (наследует QWidget) и  рассчитан на работу с одним или несколькими(в пределах 10) объектами.  Этого достаточно чтобы вызвать диалог информации об объекте или  обратиться к метрике/семантике объектов. При создании сотен тысяч данных компонентов вполне объективно  заканчивается оперативная память, что приводит к задержкам в работе ОС.

Для оптимизации предлагаем Вам использовать интерфейс MAPAPI и даже при  этом предлагаем не создавать сотни тысяч объектов, а пользоваться одним  объектом, запоминать его состояние пользуясь:

- mapCommitObject для сохранения изменений текущего объекта карты;
- mapCommitObjectAsNew для сохранения изменений как нового объекта  карты.

Так же можно считывать объект с карты в HOBJ используя его уникальный  номер на карте (ключ объекта), либо выполняя поиск по различным условиям  механизмом Select.

Если после каких-либо действий потребуется вызвать диалог информации об  объекте достаточно создать один QDMapObj и вызвать SetObjHandle передав  описатель HOBJ объекта.

Ниже приведен абстрактный пример нанесения на карту 1000 объектов используя один объект HOBJ:

 
Код
int objectCount = 1000; 
// Создаем пустой объект 
HOBJ objHandle = mapCreateObject(hMap); 
// Формируем описание объекта 
mapRegisterObject(objHandle, 1000000003, LOCAL_POINT); 
for (int object = 0; object < objectCount; ++object) 
{ 
  // Очищаем метрику объекта 
  mapDeleteSubject(objHandle, -1); 
  // Очищаем семантику объекта 
  mapDeleteSemantic(objHandle, -1); 
  // Добавляем координаты с небольшим сдвигом для каждого объекта 
  mapAppendPointPlane(objHandle, (X1+(10*object)), (Y1+(10*object)), 0); 
  // Записываем объект на карту 
  mapCommitObjectAsNew(objHandle); 
} 
// После всех действий освобождаем объект 
mapFreeObject(objHandle);  
Страницы: Пред. 1 2 3
Читают тему (гостей: 1)



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

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