Czy QgsMapLayerRegistry jest usuwane w QGIS3?

20

Czy QgsMapLayerRegistrybędzie dostępnej w pyqgis z QGIS3

Kiedy wpisałem go w konsoli python QGIS (2.99), wydaje się, że python rozpoznaje go, ponieważ wykonuje się automatycznie qgis.core.QgsMapLayerRegistry, ale następnie podaje błąd, że go nie ma:

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'

Próbowałem tego z dwiema wersjami QGIS 2.99 (jedna w 01/07 i w 06/17). Obie wersje dają ten sam błąd. importteż nie działa:

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

Czy został QgsMapLayerRegistryusunięty w QGIS3?

tinlyx
źródło

Odpowiedzi:

27

Tak, został usunięty, ale istnieją alternatywy.

Zmiany interfejsu API 3.0 są wymienione tutaj:

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

QgsMapLayerRegistry: Jego funkcjonalność została przeniesiona do QgsProject.

Głównym powodem jest to, że QgsMapLayerRegistry jest / był singletonem i dlatego może istnieć tylko jeden rejestr. Po usunięciu tego ograniczenia główne przeszkody utrudniają wdrażanie nowych rzeczy, takich jak otwieranie wielu projektów obok siebie.

Matthias Kuhn
źródło
myślę, że odpowiedź jest wciąż niepełna.
Abhijit Gujar
2
Myślę, że musisz podać więcej informacji, dlaczego uważasz, że odpowiedź jest wciąż niepełna.
Matthias Kuhn
jeśli używasz QgsProject.instance (), jak to rozwiązuje problem singletonu?
Mickey Perlstein,
@MickeyPerlstein masz rację, jeśli używasz QgsProject.instance (), to nie jest rozwiązane. Jednak samodzielne aplikacje można już teraz wdrożyć w wielu projektach, a kod serwera QGIS jest również przenoszony w tym kierunku. W dłuższej perspektywie QgsProject.instance () może całkowicie zniknąć.
Matthias Kuhn
nie rozumiem, jak przejście od używania singletonu z jednej strony do singletonu z drugiej strony zmienia możliwość uruchamiania wielu instancji (które i tak otrzymują tę samą instancję singletona (z definicji) ... czy nie byłoby sensu mieć aplikacja singleton, która uruchamia instancje? pozwoliłaby również na znacznie łatwiejszą interoperacyjność i rozszerzalność (coś w rodzaju sdk pakietu Microsoft Office, w którym można połączyć się z istniejącą otwartą instancją biura lub otworzyć nową instancję
Mickey Perlstein