6 votos

Encender otra capa cuando uno está seleccionada en la tabla con PyQGIS?

Tengo un gran número de modelo ráster archivos de profundidades de agua con sus correspondientes vectores de velocidad en el punto shapefiles. Quiero ser capaz de "caminar " por' los resultados de la visualización de las profundidades y los vectores de velocidad en la parte superior de uno al otro, pero sin tener que seleccionar las dos capas en la tabla de contenido.

Sería posible escribir código python que se convertiría en el vector correspondiente de la capa cuando una trama se convirtió en la tabla de contenido, basado en la coincidencia de su nombre?

Lo ideal sería que no necesita ninguna entrada de usuario, excepto para ejecutar el código antes de que el usuario comenzó a visualizar los resultados.

Los dos archivos (uno de trama y de un shapefile) tienen esencialmente los mismos nombres con que se identifica el nombre del modelo y que contiene un identificador numérico que sería único, a sólo esos dos capas.

4voto

Mue Puntos 2469

Trate de ejecutar el siguiente código en la Consola de Python. Esencialmente, al alternar la visibilidad de una capa raster, se encuentra una capa de vector con el mismo nombre y su visibilidad también es conmutado. El código es de aplicación únicamente a las capas ráster de modo que si una capa de vector tiene un nombre que coincida con una capa de trama, su visibilidad no puede ser conmutado (es decir, sólo se puede ver haciendo clic en el botón asociado de trama).

from PyQt4.QtCore import *
def match_layers():
    for rLayer in QgsMapLayerRegistry.instance().mapLayers().values():
        if rLayer.type() == QgsMapLayer.RasterLayer:
            name = rLayer.name()
            node = root.findLayer(rLayer.id()) 
            if node.isVisible() == Qt.Checked: 
                for vLayer in QgsMapLayerRegistry.instance().mapLayers().values():
                    if rLayer.name() == vLayer.name():
                        iface.legendInterface().setLayerVisible(vLayer, True)
                    else:
                        pass
            else:
                for vLayer in QgsMapLayerRegistry.instance().mapLayers().values():
                    if rLayer.name() == vLayer.name():
                        iface.legendInterface().setLayerVisible(vLayer, False)
        else:
            pass

root = QgsProject.instance().layerTreeRoot()
root.visibilityChanged.connect(match_layers)

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