7 votos

¿Cómo conseguir capas en x número de subgrupos?

Tengo un proyecto que tiene docenas de grupos y subgrupos. Por ejemplo..:

Main_Group > Sub_Group_1 > Sub_Group_1A > Layer_1A
                                        > Layer_2A

¿Cómo puedo acceder a las capas que están contenidas en Sub_Group_1A ?

Actualmente tengo esto:

root = QgsProject.instance().layerTreeRoot()
for child in root.children():
  if isinstance(child, QgsLayerTreeGroup):
    if child.name() == "Main_Group":
        for subChild in child.children():
            if isinstance(subChild, QgsLayerTreeGroup):
                if subChild.name() == 'Sub_Group_1':
                    # What next?

He leído a través de las siguientes fuentes y puedo obtener capas en Sub_Group_1 pero no en Sub_Group_1A :

2 votos

¿Desea acceder a todas las capas del árbol o desea acceder específicamente a las del Sub_Grupo_1A?

2 votos

@GermánCarrillo - Disculpas, debería editar la pregunta para dejarlo claro. Concretamente capas dentro de Sub_Group_1A . Si puede publicar una respuesta que muestre un limpiador de código que el que he publicado, lo aceptaré encantado :)

0 votos

Sólo preguntaba porque la otra opción que mencionaba en el comentario también es interesante, pero es otra.

4voto

Elliott Maynard Puntos 11

Hay una opción muy útil en el QgsLayerTreeGroup que puede utilizar: findGroup . Atraviesa todo el árbol. Por lo tanto, en su caso, esto sería suficiente:

root = QgsProject.instance().layerTreeRoot()
subGroup1A = root.findGroup('Sub_Group_1A')
for child in subGroup1A.children():
    if isinstance(child, QgsLayerTreeLayer):
        child.layerName()

2 votos

¡Fantástico! Muchas gracias =). Me di cuenta de que esto era brevemente mencionado en el primera fuente referenciada Supongo que lo pasé por alto.

0voto

Mue Puntos 2469

Eugh, supongo que un método es:

  1. Buscar a los hijos de Main_group entonces
  2. Buscar en los hijos de Sub_Group_1 y luego
  3. Buscar a los hijos de Sub_Group_1A .

Básicamente repitiendo los bucles, espero que haya una forma mucho más bonita y eficiente de acceder a esas capas pero por ahora, aquí está el código que he utilizado:

root = QgsProject.instance().layerTreeRoot()
for child in root.children():
    if isinstance(child, QgsLayerTreeGroup):
        if child.name() == "Main_Group":
            for subChild in child.children():
                if isinstance(subChild, QgsLayerTreeGroup):
                    if subChild.name() == 'Sub_Group_1':
                        if isinstance(subChild, QgsLayerTreeGroup):
                            for sub_subChild in subChild.children():
                                if isinstance(sub_subChild, QgsLayerTreeGroup):
                                    if sub_subChild.name() == 'Sub_Group_1A':
                                        for layers in sub_subChild.children():
                                            print layers.layerName()

0voto

bmw0128 Puntos 2824

Para x número de subgrupos puedes usar ese script:

def getLayersOfGroup(group):
    """That function find all layers under given group"""
    for child in group.children():
        if isinstance(child, QgsLayerTreeLayer):
            print(child.layer().name()
        elif isinstance(child, QgsLayerTreeGroup):
            getLayersOfGroup(child)
root = QgsProject.instance().layerTreeRoot()
group = root.findGroup("GROUP NAME")
if group:
    getLayersOfGroup(group)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X