Jak przełączać widoczność warstw w QGIS za pomocą Pythona?

12

Jak mogę przełączać widoczność warstwy w QGIS za pomocą API Python?

podmrok
źródło

Odpowiedzi:

11

Pochodzi z dokumentacji QGIS, jeśli używasz QGIS => 1.5

from PyQt4 import QtCore, QtGui
from qgis import core, gui
i = qgis.utils.iface
# load a georeferenced raster layer
loadedLayer = i.addRasterLayer('c:\\data\\a_map.png')
# get legend
legend = i.legendInterface()
# check current visibility
legend.isLayerVisible(loadedLayer)
# set visibility off 
legend.setLayerVisible(loadedLayer, False)
# and on again!
legend.setLayerVisible(loadedLayer, True) 

Myślę, że po prostu zamieniłbyś się loadedLayer = i.addRasterLayer('c:\\data\\a_map.png')warstwą, którą chcesz ukryć, którą możesz uzyskać za pomocą czegoś takiego:

QgsMapLayerRegistry.instance().mapLayer(QString theLayerId)
Nathan W.
źródło
0

Akceptowana odpowiedź nie jest dostępna dla QGIS3. W QGIS3 używam poniższego kodu:

QgsProject.instance().layerTreeRoot().findLayer(lyr.id()).setItemVisibilityChecked(False)

Możemy również włączać i wyłączać wszystkie warstwy poprzez:

bool = True # or False
root = QgsProject.instance().layerTreeRoot()
allLayers = root.layerOrder()
for layer in allLayers:
    root.findLayer(layer.id()).setItemVisibilityChecked(bool)

Zac Wang
źródło
Twój pierwszy blok kodu nie jest przełącznikiem, ale wyraźnie ustawia warstwę docelową na niewidoczną.
Legato,