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

TMapView добавление множества объектов

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 След.
RSS
TMapView добавление множества объектов, Оптимизация отрисовки
 
Добрый день.
Использую axcMapView.
Задача нанести на карту много (порядка мульона) точечных объектов.
Как делаю: создаю axMapObject, добавляю ему семантику и метрику. Делаю коммит объекту. Перехожу на следующий.
После коммита я так понимаю что перерисовывается карта.
Можно их как-то группой коммитить или включать/отключать автоматическую перерисовку карты на время добавления?

Проверял на паре сотен объектов.. приложение замирает порядка секунд 10-15.. т.е. прогнозируемое время отрисовки 1 млн точек порядка 13 часов
Изменено: Валерий Валериевич - 11.03.2019 13:53:35
 
Добрый день.
Перед нанесением объектов необходимо выставить свойство Rendering в false, а после обратно в true.

Дополнительно для ускорения нанесение объектов можете воспользоваться API функций ядра mapSetLoadState
Код
  // Установить/запросить для карты режим потоковой загрузки данных
  // Применяется для ускорения загрузки данных из обменных форматов при создании карты
  // В процессе загрузки данных другие потоки или процессы не должны выполнять редактирование карты
  // hMap  -  идентификатор открытых данных
  // hSite -  идентификатор открытой пользовательской карты
  // state -  режим потоковой загрузки данных (1 - включен, 0 - выключен)
  // В режиме потоковой загрузки данных отключается журналирование операций
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetLoadState(HMAP hMap, HSITE hSite, long int state);
_MAPIMP long int _MAPAPI mapGetLoadState(HMAP hMap, HSITE hSite);
 
Отключение рендеринга не сильно помогло. Осталась надежда на отключение журналирования операций через MapApi.
Что нужно включить в проект /положить рядом с экзешником и т.п. чтобы заработали функции mapapi?
Т.е. чтобы помпонент и mapapi как-то синхронизировались.. у меня ощущение что для для работы через mapapi требуется чтобы и карта открывалась через него.
Среда разработки QT .. набор компонентов из состава ToolKit Active Free

И второй вопрос.
При создании объекта на карте через CreateObjectByKey я получаю HOBJ. После работы MapFind в свойстве mapObjec.ObjHandle немного другой идентификатор получаю.. подскажите, пожалуйста, как их свести в 1 к 1 т.е. сопоставить?
 
Добрый день.
Функция находится в библиотеке gisacces.dll.
Цитата
для для работы через mapapi требуется чтобы и карта открывалась через него
Нет, не надо. Компоненты - это, грубо говоря, надстройка над mapapi.
Вам надо взять MapHandle от MapView и его передать в api функцию в качестве hMap. Если у открыта одна карта, то передаете hSite = MapHandle.

Цитата
При создании объекта на карте через CreateObjectByKey я получаю HOBJ. После работы MapFind в свойстве mapObjec.ObjHandle немного другой идентификатор получаю.. подскажите, пожалуйста, как их свести в 1 к 1 т.е. сопоставить?
MapFind - компонент для поиска объектов по заданным условиям. В MapFind Вы задаете условие на выборку объектов и переходите по записям, попавшим в нее. Переходом по записям в MapFind управляете Вы. CreateObjectByKey  возвращает указатель на новый объект.
После создания объекта (после commit) Вы можете запросить номер объекта и задать его в качестве параметра поиска в MapFind.

Крайне не рекомендуется использовать один и тот же компонент на форме MapObject для создания/редактирования объектов и поиска. Используйте 2 отдельных компонента, чтобы избежать путаницы: один связанный с MapFind для получения информации об объекте в результате поиска, а второй для создания/редактирования объектов карты.

Кроме этого, учитывая то, что Вы хотите ускорить нанесение объектов  на карту, то не выполняйте после каждого создания объекта поиск.
 
Спасибо попробую.
Цитата
Роман Твердов написал:
После создания объекта (после commit) Вы можете запросить номер объекта и задать его в качестве параметра поиска в MapFind.
Подскажите, пожалуйста, в какое свойство aiMapSelect подать handle объекта после коммита, чтобы он по нему отфильтровал? Пересмотрел руководство программиста 2 раза - не нашел куда его пристроить(
 

Номер объекта в карте .

aiMapSelect.SetSelectKey(MapObj.Key, MapObj.Key)

handle  - это указатель на объект карты  в памяти.

 
Спасибо.

Подскажите, а как получить из классификатора сита примеры доступных объектов?
Изменено: Валерий Валериевич - 25.03.2019 15:36:05
 
Добрый день.
Api по работе с классификатором карты смотрите в  rscapi.h
 
Справочные системы по средствам разработки (on-line), документация, обновления, GIS ToolKit 12 | GIS ToolKit Active 12 | MAPAPI


Функции работы с классификаторами векторных карт


Отобразить образец вида объекта c учетом типа визуализации (функции mapPaintExampleObject.....)
 
Ерунда какая-то в QT с выключением логов и нанесением объектов на карту.
Делаю так:
Включаю режим потоковой загрузки данных и/или отключаю логи:
так ::mapSetLoadState( axсMapView->property("MapHandle").toInt(), SIT->property("SiteHandle").value<int>(), true );
или так SIT->dynamicCall("WriteLogAccess(bool)", false );

наношу объекты на карту.. (время выполнения теперь адекватное)

выключаю потоковую загрузку и/или включаю обратно логи.

Поиск по объектам работает.
Закрываю/Открываю свое приложение. Открываю СИТ объекты отображаются - поиск не работает. При этом если ситовские файлы открыть панарамой мини - то на карте объектов не видно, но по поиску они все находятся с метриками и симантиками.

Если проделываю все тоже самое без включенного ускорения - после переоткрытия моего приложения - поиск работает и панарама мини отображает объекты на карте.

У себя в коде комментирую и раскоментирую только указанные выше строки - больше ничего не трогаю при этом ;) (это на всякий случай)
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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