O QgsMapLayerRegistry foi removido no QGIS3?

19

Está QgsMapLayerRegistryindo ser availabe em pyqgis com QGIS3

Quando eu o digitei no console python do QGIS (2.99), o python parece reconhecê-lo porque é concluído automaticamente qgis.core.QgsMapLayerRegistry, mas depois dá um erro que ele não está lá:

Traceback (most recent call last):
  File "/usr/lib/python3.5/code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
AttributeError: module 'qgis.core' has no attribute 'QgsMapLayerRegistry'

Eu tentei isso com duas versões do QGIS 2.99 (uma em 01/07 e em 17/06). Ambas as versões dão o mesmo erro. importtambém não funciona:

>>>from qgis.core import QgsMapLayerRegistry
Traceback (most recent call last):
  File "/usr/lib/python3.5/code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
ImportError: cannot import name 'QgsMapLayerRegistry'

É QgsMapLayerRegistryremovido no QGIS3?

tinlyx
fonte

Respostas:

26

Sim, foi removido, mas existem alternativas.

As alterações da API 3.0 estão listadas aqui:

https://qgis.org/api/api_break.html

QgsMapLayerRegistry: Sua funcionalidade foi movida para QgsProject.

O principal motivo é que QgsMapLayerRegistry é / era um singleton e, portanto, apenas um único registro poderia existir. Com essa restrição removida, os principais obstáculos estão fora do caminho para implementar coisas novas, como ter vários projetos abertos lado a lado.

Matthias Kuhn
fonte
Eu acho que a resposta ainda está incompleta.
Abhijit Gujar
2
Eu acho que você precisa fornecer mais informações por que você acha que a resposta ainda está incompleta.
Matthias Kuhn
se você usa QgsProject.instance (), como isso resolve o problema de singleton?
Mickey Perlstein 10/10
@MickeyPerlstein você está certo, se você usar QgsProject.instance (), não será resolvido. No entanto, aplicativos autônomos já podem ser implementados com vários projetos e o código do servidor QGIS também é movido nessa direção. A longo prazo, QgsProject.instance () pode desaparecer completamente.
Matthias Kuhn
Eu não entendo como a mudança de usar um singleton de uma parte para um singleton de outra parte altera a capacidade de executar várias instâncias (que de qualquer maneira recebem a mesma instância de singleton (por definição) ... não faria mais sentido ter um ? aplicativo singleton que obtém executando instâncias isso também permitiria que muito mais fácil interopability e extensibilidade (tipo como SDK microsoft office onde você pode se conectar a uma instância aberta existente do office ou abrir uma nova instância
Mickey Perlstein