Obtendo a lista de nomes de camadas usando o PyQGIS?

11

Eu preciso de uma lista contendo os nomes de todas as camadas em uma sessão QGIS. Eu fiz a tarefa como

layersNames = []
for i in self.iface.mapCanvas().layers():
   layersNames.append(str(i.name()))

mas isso tem o problema de que apenas os nomes das camadas visíveis são extraídos. Como posso obter uma lista com os nomes de todas as camadas (visíveis ou não) usando o PyQGIS?

jgpallero
fonte

Respostas:

18

QgsMapLayerRegistry.instance().mapLayers() fornecerá todas as camadas abertas.

Se você quiser os nomes, então:

names = [layer.name() for layer in QgsMapLayerRegistry.instance().mapLayers().values()]

names será uma lista de nomes de camadas

ou usando uma função normal:

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    print layer.name()
Nathan W
fonte
6

Desde a versão 3, as QgsMapLayerRegistryfuncionalidades foram movidas para QgsProject: https://qgis.org/api/api_break.html

Atualização para QGIS3.x:

from qgis.core import QgsProject
names = [layer.name() for layer in QgsProject.instance().mapLayers().values()]
print(names)

conforme resposta de Nathan W, isso produz uma lista de camadas no projeto atual:

['GoogleSat', 'MyPointsLayer', 'Roads', 'House_numbers']

RafDouglas
fonte