지도 레이어를 반복하는 방법을 알아내는 데 어려움을 겪고 있습니다. 목차에서 현재 강조 표시된 레이어에 액세스 할 수 iface.activeLayer()
있지만 코드가 모든 레이어에서 작동하기를 원합니다.
이 기능에 쉽게 액세스 할 수 있고 좋은 온라인 예를 찾을 수 없지만 뭔가를 놓친 API가 아무것도 보이지 않습니까?
지도 레이어를 반복하는 방법을 알아내는 데 어려움을 겪고 있습니다. 목차에서 현재 강조 표시된 레이어에 액세스 할 수 iface.activeLayer()
있지만 코드가 모든 레이어에서 작동하기를 원합니다.
이 기능에 쉽게 액세스 할 수 있고 좋은 온라인 예를 찾을 수 없지만 뭔가를 놓친 API가 아무것도 보이지 않습니까?
답변:
시험...
# substitute 'self' with 'qgis.utils.iface' when run from Python console
# 'self.iface = iface' would usually precede this command in your class
layers = self.iface.legendInterface().layers()
for layer in layers:
layerType = layer.type()
if layerType == QgsMapLayer.VectorLayer:
# do some stuff here
에서 발췌 consolidatethread.py 에서 QConsolidate 플러그인 .
legendInterface ()에서 반환 된 QgsLegendInterface 객체에 대한 설명입니다 .
편집 : 위의 'self'에 대한 정보를 추가했습니다.
QGIS 2.6의 경우 각 계층을 식별하고 그룹화하는 코드는 다음과 같습니다.
#make the desired groups for layers
toc = self.iface.legendInterface()
root = QgsProject.instance().layerTreeRoot()
group1 = root.insertGroup(0, "Group Point")
group2 = root.insertGroup(1, "Group Line")
group3 = root.insertGroup(2, "Group Polygon")
#get the list of layers from registry
layers = QgsMapLayerRegistry.instance().mapLayers()
#segregate layers into groups
for name, layer in layers.iteritems():
# check the layer geometry type
if layer.geometryType() == QGis.Point:
toc.moveLayer(layer, 0)
if layer.geometryType() == QGis.Line:
toc.moveLayer(layer, 1)
if layer.geometryType() == QGis.Polygon:
toc.moveLayer(layer, 2)
참고 : 그룹화 후 중복 레이어를 제거해야합니다 root.removeLayer(lyr)
.
QGIS 3 QgsMapLayerRegistry
의 기능이로 이동되었습니다 QgsProject
.
따라서 맵 레이어를 반복하려면 해당 구조를 사용해야합니다.
layers = QgsProject.instance().mapLayers()
.mapLayers()
로 구조화 된 사전을 반환합니다 {layer_x_id: layer_x, layer_y_id: layer_y, ....}
. 그런 다음 다음과 같은 레이어를 반복 할 수 있습니다.
for layer_id, layer in layers.items():
print(layer.name())
.mapLayers()
사전 ( dict
)을 반환 하기 때문에이 경우 레이어가 포함 .values()
된을 반환하는 사전 방법을 사용할 수도 있습니다 list
. 그런 다음 다음과 같은 레이어를 반복 할 수 있습니다.
layers = QgsProject.instance().mapLayers().values()
for layer in layers:
print(layer.name())
원하는 경우 다음과 같이 반복 할 수 있습니다.
layers = QgsProject.instance().mapLayers() # dictionary
for layer in layers.values():
print(layer.name())
for layer in layers: print(layer)
스크립트를 사용하여 키를 인쇄 할 수 있습니다. 또는 루프 print(layers.keys())
없이 사용하십시오 for
.