Создание слоёв в древовидной структуре
Кроме того, в такой иерархической структуре ГИС данных необходимо предусмотреть наличие слоёв. Встаёт вопрос, как правильно организовать визуализацию слоёв, используя дерево.
Мы предлагаем следующие варианты:
Создать несколько деревьев, одно для каждого слоя.
Указывать атрибут слоя для каждого примитива, и потом проверять, видим ли слой, и если да, то выводить примитив на экран.
Указать атрибут слоя для группы примитивов, и потом проверять, видим ли слой, и если да, то выводить группу примитивов на экран.
Первый вариант достаточно сложен, если у нас много слоёв, то придётся создавать много деревьев, и каждое проверять, видимо ли оно. Второй вариант проще, в большинстве случаев должен работать быстрее. Третий вариант, предлагаемый нами - дерево, у которого листья (или группа примитивов, что в данном случае почти одно и то же) имеют атрибут слоя. Этот способ построения дерева должен быть наиболее удачным. Он удачней первого способа тем, что позволяет избежать движения от корня деревьев к листьям раз, где - количество слоёв. И удачней второго способа тем, что проверка на необходимость вывода на экран невидимого слоя производится над группой примитивов целиком, а не по отдельным примитивам.
Действительно, пусть лист содержит 150 примитивов одного, видимого, и 150 примитивов невидимого слоя. Программа сразу приступит к выводу 150 примитивов видимого слоя на экран, и после установит, что остальные 150 примитивов невидимы, не проверяя атрибут каждого примитива. При этом выполнится примерно в 150 раз меньше операций, чем при проверке на видимость слоя каждого примитива.
Поэтому был реализован именно третий вариант.
Источник: http://soohar.ru