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 |
댓글