본문 바로가기
[Framework] - QGIS

# 5. QgsLayerTree

by Bebsae 2021. 4. 21.

QgsLayerTree 클래스 다이어그램

root: QgsLayerTree = QgsProject().instance().layerTreeRoot()

QgsLayerTree 클래스는 QgsLayerTreeNode클래스 기반이므로 child()와 parent() 메소드를 통해 부모, 자식 노드를 반환할 수 있다. 이는 계층형 UI의 model을 구현할 때 용이하다.

 

"""
/***************************************************************************
        begin                : 
        email                : 
 ***************************************************************************/
"""
from qgis.gui import QgsLayerTreeView
from qgis.gui import QgisInterface
from qgis.core import QgsLayerTree
from qgis.core import QgsLayerTreeNode
from qgis.core import QgsProject


class LayerViewUtils:
    @staticmethod
    def get_active_node(iface: QgisInterface):
        """
        레이어 패널에 선택된 노드 (그룹, 노드)
        :param iface:
        :return: QgsLayerTreeNode
        """
        view: QgsLayerTreeView = iface.layerTreeView()
        for node in view.selectedNodes():
            yield node

    @staticmethod
    def get_active_group(iface: QgisInterface):
        """
        레이어 패널에 선택된 노드 (그룹)
        :param iface:
        :return: QgsLayerTreeNode
        """
        root: QgsLayerTree = QgsProject.instance().layerTreeRoot()
        view: QgsLayerTreeView = iface.layerTreeView()
        for node in view.selectedNodes():
            if root.isGroup(node):
                yield node

    @staticmethod
    def get_active_layer(iface: QgisInterface):
        """
        레이어 패널에 선택된 노드 (레이어)
        :param iface:
        :return: QgsLayerTreeNode
        """
        root: QgsLayerTree = QgsProject.instance().layerTreeRoot()
        view: QgsLayerTreeView = iface.layerTreeView()
        for node in view.selectedNodes():
            if root.isLayer(node):
                yield node

    @staticmethod
    def get_groups():
        """
        모든 그룹
        :return: QgsLayerTreeNode
        """
        root: QgsLayerTree = QgsProject.instance().layerTreeRoot()
        for node in root.children():
            node: QgsLayerTreeNode
            if root.isGroup(node):
                yield node

    @staticmethod
    def get_visible_groups():
        """
        체크된 그룹
        :return: QgsLayerTreeNode
        """
        root: QgsLayerTree = QgsProject.instance().layerTreeRoot()
        for node in root.children():
            node: QgsLayerTreeNode
            if root.isGroup(node) and node.itemVisibilityChecked():
                yield node

    @classmethod
    def get_layers_by_group_name(cls, group_name: str):
        """
        그룹이름에 해당하는 모든 레이어
        :param group_name:
        :return: QgsLayerTreeNode
        """
        root: QgsLayerTree = QgsProject.instance().layerTreeRoot()
        for group in cls.get_groups():
            if group.name() != group_name:
                continue
            for child in group.children():
                if root.isLayer(child):
                    yield child

위 코드는 QgsLayerTree 클래스의 API들을 응용한 것들이다.

'[Framework] - QGIS' 카테고리의 다른 글

# 4. QGIS MV (Model-View) 패턴  (0) 2021.04.21
# 3. QgsVectorDataProvider  (0) 2021.04.13
#2. QgsFeature 이동  (0) 2021.04.09
#1. 시점이동, 객체의 필드  (0) 2021.01.22
#0. QgsGeometry, asPolyline()  (0) 2021.01.22

댓글