QgsMapLayerRegistryはQGIS3で削除されましたか?


19

QgsMapLayerRegistryQGIS3とpyqgisで空くことになるだろう

QGIS pythonコンソール(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の2つのバージョン(01/07に1つと06/17に1つ)で試しました。両方のバージョンで同じエラーが発生します。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で削除?

回答:


26

はい、削除されましたが、代替手段が存在します。

3.0 APIの変更点は次のとおりです。

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

QgsMapLayerRegistryその機能はに移動しましたQgsProject

主な理由は、QgsMapLayerRegistryがシングルトンであるため、単一のレジストリのみが存在する可能性があるためです。この制約が削除されると、主要な障害は、複数のプロジェクトを並べて開くなどの新しいものを実装する方法から外れます。


答えはまだ不完全だと思います。
アビジットグジャール

2
答えがまだ不完全だと思う理由をもっと詳しく説明する必要があると思います。
マティアスクーン

QgsProject.instance()を使用すると、シングルトンの問題はどのように解決されますか?
ミッキーペルルシュタイン

@MickeyPerlsteinあなたは正しい、QgsProject.instance()を使用する場合、それは解決されません。ただし、スタンドアロンアプリは既に複数のプロジェクトで実装でき、QGISサーバーコードもこの方向に移動されています。長い目で見れば、QgsProject.instance()完全に消えてしまうかもしれません
マティアスクーン

ある部分でシングルトンを使用することから別の部分でシングルトンに移動することで、複数のインスタンスを実行する能力が変わることを理解できません(とにかく(定義により)同じシングルトンインスタンスを受信します)... ?インスタンスを実行しますアプリシングルトンこれはまた、あなたがオフィスの既存のオープンインスタンスに接続するか、新しいインスタンスを開くことができるようにMicrosoft Office SDKの方がはるかに簡単interopabilityと拡張性(一種できるようになる
ミッキーPerlstein

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.