Серия представляет собой совокупность пяти связанных таблиц, поэтому обнулять или удалять что-нибудь нельзя. Рекомендуем пользоваться уже несколько раз указанными api-функциями удаления и создания серии, иначе результат непредсказуем.
23.07.2017 20:18:51
Именно так и происходит объекты не удаляются из карты, а становятся системными. Мне нужно именно удалить эту серию из карты совсем. Как это сделать? |
|||
|
|
24.07.2017 09:04:52
Само понятие "серия" существует только в классификаторе карты. Для объектов карты есть только код условного знака в классификаторе (ссылка на объект классификатора).
Является ли серией условный знак объекта или нет, сам объект не знает. Функция Ее вызовом Вы удалили описание серии в классификаторе карты, а не объекты с карты, имеющие такой код. А поскольку условного знака для этих объектов больше не стало в классификаторе, они стали отображаться системными знаками. Для удаления объекта карты выполняется функцией Если требуется выполнить удаление множества, объединенных по какому либо критерию, то надо Либо можно воспользоваться связкой компонент GIS ToolKit - TMapFind+TMapObj. |
|
|
|
24.07.2017 19:16:56
Если бы у Вас была карта, содержащая только те объекты, которые надо удалить, тогда можно было бы не разбираться и почистить всю карту. А поскольку Вам нужна для удаления выборка объектов по определенным условиям, то без операций поиска и перебора результатов этого поиска не обойтись. 1. Задержка происходит из-за того, что без явного управления транзакциями для каждой операции с каждым объектом открывается отдельная транзакция. Если нет необходимости вести журнал транзакций, то его можно отключить (см. метод TMapView.WriteLogAccess или MAPAPI - Если журнал нужен, то для массовых операций следует открывать транзакцию и по завершении ее закрывать (тогда транзакция будет всего одна для всего пакета операций). Функционал для работы с журналом транзакций описан 2. Также рекомендуется отключать отрисовку карты на время выполнения потоковых операций (см. свойство TMapView.Rendering). 3. Кроме того потоковые операции сильно замедляются интерфейсными излишествами типа
Но основная причина замедления - отдельные транзакции на каждое удаление объекта. Да, и MapObj.Commit после MapObj.Delete не нужен. |
|||||
|
|
24.07.2017 19:25:00
понятно, буду пробовать
|
|
|
|
28.07.2017 12:21:42
mapLogAccess (form_main.mvMap.MapHandle,0,0); это особенно помогло. Время удаления объектов из карты уменьшилось с 10 минут, до 1 минуты. Спасибо. |
|||
|
|
28.07.2017 14:23:49
Все равно это долго, если у Вас не десятки миллионов объектов. Вы можете провести эксперимент: Сделайте копию Вашей карты, откройте ее в ГИС Карте, выделите те же объекты и выполните их удаление со снятой галкой "Запись транзакций". Ваше приложение может выполнять удаление с такой же скоростью, если Вы не делаете лишних замедлений в виде вывода на форме семантических характеристик удаляемых объектов (их все равно никто прочитать не успеет), либо лишних перерисовок элементов формы и самой карты. |
|||||
|
|
||||
© КБ Панорама, 1991-2024 Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности |