RUS  ENG 

Невидимость элементов в слое

Страницы: 1
RSS
Невидимость элементов в слое
 
Добрый день!

На карте есть слой с повреждениями. Повреждение представляет из себя красный крестик добавленный на слой через панель "Редактор" путем нажатия на "Выбор типа". Каждому такому крестику соответствует запись в таблице "Повреждения", у записи есть колонка с датой устранения. Задача состоит в том, чтобы отображать на карте только те повреждения, которые не имею дату устранения.

К примеру у нас есть 1000 повреждений(массив айдишников элементов слоя). Из них 400 имеют дату устранения. Как лучше всего отобразить карту, показав на ней только те 600 повреждений, которые не имею дату устранения, соответственно скрыв остальные 400, т.е. как скрыть большое количество элементов слоя зная их айдишники, желательно одним запросом на сервер?

Спасибо.

PS: пишу на C#
 
Например, можно при помощи тематической раскраски:

http://www.politerm.com/zuludoc/zuluax/Themes_AddTheme.htm
 
Спасибо за ответ. Обязательно отпишусь как попробую.
 
private void HideDamages()
{
var theme = new ThemeClass();
for (var i = 0; i<LayerDamage.ElementKeys.Count ; i++)
{
if (_activeDamages.Contains(LayerDamage.ElementKeys[i + 1]))
continue;

theme.Parameter[LayerDamage.ElementKeys[i + 1], eThemeField.eThemeInvisible] = 1;
}
var id = LayerDamage.Themes.AddTheme(theme);
LayerDamage.Themes.SetEnabled(id, true);
}

На карте около 1500 элементов, все это отрабатывает очень и очень долго. Скорее всего из за того что на каждый элемент посылается запрос на сервер.
Возможно ли реализовать все это одним запросом?

Спасибо.
 
Метод theme.Parameter с сервером не работает и времени отнимать не должен.

Первая ошибка по тексту: LayerDamage.ElementKeys нужно получить один раз и запомнить в переменную типа -
var Keys = LayerDamage.ElementKeys
Иначе это запрашиваться будет все коллекция каждый раз при выполнении LayerDamage.ElementKeys

Второе: что такое _activeDamages.Contains не знаю. Если это по каждому ключу запрос к базе, то это тоже не экономично. Нужно запросить у базы сразу всех, кто содержит или не содержит признак. Получить один раз датасет и идти по нему. Тогда и LayerDamage.ElementKeys возможно не понадобится
 
_activeDamages - просто массив с айдишниками элементов.

var keys = LayerDamage.ElementKeys - спасло ситуацию
Самое затратное - обращение к LayerDamage.ElementKeys

Теперь отрабатывает очень быстро. Спасибо.

Вдруг кому пригодится
var theme = new ThemeClass();
var keys = LayerDamage.ElementKeys;
for (var i = 0; i < keys.Count; i++)
{
if (_activeDamages.Contains(keys[i + 1]))
continue;
theme.Parameter[keys[i + 1], eThemeField.eThemeInvisible] = 1;
}

var id = LayerDamage.Themes.AddTheme(theme);
LayerDamage.Themes.SetEnabled(id, true);
Страницы: 1