Wird QgsMapLayerRegistry in QGIS3 entfernt?

19

Wird QgsMapLayerRegistryin Pyqgis mit QGIS3 verfügbar sein

Wenn ich es in die QGIS-Python-Konsole (2.99) eingetippt habe, scheint Python es zu erkennen, weil es automatisch vervollständigt qgis.core.QgsMapLayerRegistrywird, gibt dann aber einen Fehler aus, dass es nicht vorhanden ist:

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'

Ich habe dies mit zwei Versionen von QGIS 2.99 versucht (eine in 01/07 und eine in 06/17). Beide Versionen geben den gleichen Fehler. importfunktioniert auch nicht:

>>>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'

Wird QgsMapLayerRegistryin QGIS3 entfernt?

Tinlyx
quelle

Antworten:

26

Ja, es wurde entfernt, aber es gibt Alternativen.

Änderungen der 3.0 API sind hier aufgelistet:

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

QgsMapLayerRegistry: Die Funktionalität wurde nach verschoben QgsProject.

Der Hauptgrund ist, dass QgsMapLayerRegistry ein Singleton ist / war und daher nur eine einzige Registry existieren kann. Wenn diese Einschränkung beseitigt ist, sind große Hindernisse nicht mehr in der Lage, neue Dinge zu implementieren, z. B. mehrere Projekte nebeneinander zu öffnen.

Matthias Kuhn
quelle
Ich denke, die Antwort ist noch unvollständig.
Abhijit Gujar
2
Ich denke, Sie müssen mehr Informationen geben, warum Sie denken, dass die Antwort noch unvollständig ist.
Matthias Kuhn
Wenn Sie QgsProject.instance () verwenden, wie löst das das Singleton-Problem?
Mickey Perlstein
@ MickeyPerlstein Sie haben Recht, wenn Sie QgsProject.instance () verwenden, ist es nicht gelöst. Standalone-Apps können jedoch bereits jetzt mit mehreren Projekten implementiert werden, und der QGIS-Servercode wird auch in diese Richtung verschoben. Auf lange Sicht QgsProject.instance () könnte ganz verschwinden.
Matthias Kuhn
Ich verstehe nicht, wie der Übergang von einem Singleton auf einem Teil zu einem Singleton auf einem anderen Teil die Fähigkeit verändert, mehrere Instanzen auszuführen (die sowieso dieselbe Singleton-Instanz erhalten (per Definition) ... Wäre es nicht sinnvoller, eine zu haben? Singleton-App, mit der Instanzen ausgeführt werden - dies würde auch die Interoperabilität und Erweiterbarkeit erheblich erleichtern (vergleichbar mit Microsoft Office SDK, bei dem Sie eine Verbindung zu einer vorhandenen offenen Instanz von Office herstellen oder eine neue Instanz öffnen können
Mickey Perlstein