QGIS3에서 QgsMapLayerRegistry가 제거 되었습니까?


20

되어 QgsMapLayerRegistryQGIS3와 pyqgis에 availabe 될 것

QGIS python console (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'

되어 QgsMapLayerRegistryQGIS3에서 제거?

답변:


27

예, 제거되었지만 대안이 있습니다.

3.0 API의 변경 사항은 다음과 같습니다.

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

QgsMapLayerRegistry: 기능이로 이동되었습니다 QgsProject.

주된 이유는 QgsMapLayerRegistry가 단일 항목이므로 단일 레지스트리 만 존재할 수 있기 때문입니다. 이 제약 조건이 제거되면 주요로드 블록이 여러 프로젝트를 나란히 열어 놓는 것과 같은 새로운 것을 구현할 수 없습니다.


나는 대답이 여전히 불완전하다고 생각합니다.
Abhijit Gujar 2016 년

2
답이 여전히 불완전하다고 생각하는 이유에 대해 더 많은 정보를 제공해야한다고 생각합니다.
Matthias Kuhn

QgsProject.instance ()를 사용하면 싱글 톤 문제를 어떻게 해결합니까?
미키 펄스 타인

@MickeyPerlstein 당신이 맞습니다 .QgsProject.instance ()를 사용하면 해결되지 않습니다. 그러나 이제 독립 프로젝트를 여러 프로젝트로 구현할 수 있으며 QGIS 서버 코드도이 방향으로 이동합니다. 장기적으로 QgsProject.instance () 완전히 사라질 수 있습니다 .
Matthias Kuhn

한 부분의 싱글 톤을 사용하는 방법에서 다른 부분의 싱글 톤으로 이동하면 여러 인스턴스를 실행하는 기능이 어떻게 변경되는지 이해하지 못합니다 (어쨌든 같은 단일 인스턴스를 정의로 정의) ... 인스턴스를 실행하는 싱글 톤 앱-또한 훨씬 더 쉬운 상호 운용성과 확장 성을 제공합니다 (기존의 열린 사무실 인스턴스에 연결하거나 새 인스턴스를 열 수있는 Microsoft Office SDK와 유사 함)
Mickey Perlstein

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.