RUS  ENG 

Медленное добавление объектов в Selection слоя

Страницы: 1
RSS
Медленное добавление объектов в Selection слоя
 
Добрый день!

В цикле выделяю коллекцию объектов на карте.
...
foreach (var arc in arcIds) {
_layer.Selection.AddElem(arc);
}
...
Когда количество объектов > 20 выделение происходит медленно. Возможно дело в том, что идет перерисовка карты после добавления в Selection каждого элемента. Возможно ли сделать так, чтобы прорисовка отрабатывала уже после выделения всех объектов(что-то типа BeginUpdate() и EndUpdate()). Может кто нибудь уже сталкивался и решал подобную проблему?

PS: работаю через ActiveX на C#
 
Попробуйте:

Layer.Selection.Visible = false
--------------------------------------
Layer.Selection.Visible = true
 
Спасибо за ответ.

Время выделения 215 объектов было 24,5 секунды, стало 12,5.

Нет ли способа еще ускорить эту операцию?
 
Если слой на сервере, то на него идет 215 запросов. В зависимости от связи и загрузки сервера это в любом случае не очень эффективно.
Можно выделить несколько объектов, послав один запрос на сервер. Например (VB)

Dim arr(215) As Long

arr(0) = 68
arr(1) = 224
arr(2) = 132

MapCtrl1.Map.Layers.Active.Selection.Modify 1, 3, arr(0)

Посмотрите разные варианты: http://www.politerm.com/zuludoc/zuluax/Selection_cls.htm
 
Я не совсем понял, по логике мне нужно использовать метод ModifyByKeys(What As eModifySelection, Keys As ElementKeys). Но как мне привести массив целых чисел к типу ElementKeys? Попробовал создать экземпляр класса ElementKeys, но он не содержит методов добавления.
 
ElementKeys сам не создается. Он получается как результат выполнения различных методов. В Вашем случае он не подходит. В примере массив длинных целых: MapCtrl1.Map.Layers.Active.Selection.Modify
Можно конечно еще метод добавить, например SAFEARRAY через VARIANT передавать.
 
Спасибо, я понял, все получилось.
...
var arr = arcIds.ToArray();
_layer.Selection.Modify((eModifySelection)1, arr.Length, ref arr[0]);
...
Страницы: 1