QgsMapLayerRegistry удален в QGIS3?

20

Будет QgsMapLayerRegistryдоступен в Pyqgis с QGIS3

Когда я набрал его в консоли Python QGIS (2.99), кажется, что python распознает его, потому что он автоматически завершается qgis.core.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>
AttributeError: module 'qgis.core' has no attribute 'QgsMapLayerRegistry'

Я попробовал это с двумя версиями QGIS 2.99 (одна в 01/07 и в в 06/17). Обе версии выдают одну и ту же ошибку. importтоже не работает:

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

Является ли QgsMapLayerRegistryудален в QGIS3?

tinlyx
источник

Ответы:

27

Да, это было удалено, но альтернативы существуют.

Изменения API 3.0 перечислены здесь:

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

QgsMapLayerRegistry: Его функциональность была перенесена в QgsProject.

Основная причина в том, что QgsMapLayerRegistry является / был одноэлементным, и поэтому может существовать только один реестр. С устранением этого ограничения основные препятствия на пути реализации новых вещей, таких как одновременное открытие нескольких проектов.

Матиас Кун
источник
я думаю, что ответ все еще неполон.
Абхиджит Гуджар
2
Я думаю, что вам нужно дать больше информации, почему вы думаете, что ответ по-прежнему неполный.
Матиас Кун
если вы используете QgsProject.instance (), как это решает проблему синглтона?
Микки Перлштейн
@MickeyPerlstein вы правы, если вы используете QgsProject.instance (), это не решается. Однако автономные приложения уже могут быть реализованы в нескольких проектах, и код сервера QGIS также перемещается в этом направлении. В долгосрочной перспективе QgsProject.instance () может полностью исчезнуть.
Матиас Кун
я не понимаю, как переход от использования синглтона на одной части к синглтону на другой части изменяет способность запускать несколько экземпляров (которые в любом случае получают один и тот же экземпляр синглтона (по определению) ... разве не имеет смысла иметь одноэлементное приложение, которое запускает экземпляры - это также позволит значительно упростить возможность взаимодействия и расширения (например, Microsoft Office SDK, где вы можете подключиться к существующему открытому экземпляру офиса или открыть новый экземпляр
Микки Перлштейн,