Apakah QgsMapLayerRegistry dihapus di QGIS3?

20

Apakah QgsMapLayerRegistryakan availabe di pyqgis dengan QGIS3

Ketika saya mengetikkannya ke konsol python QGIS (2.99), python sepertinya mengenalinya karena secara otomatis selesai qgis.core.QgsMapLayerRegistry, tetapi kemudian memberikan kesalahan bahwa itu tidak ada di sana:

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'

Saya mencoba ini dengan dua versi QGIS 2.99 (satu di 01/07 dan di 06/17). Kedua versi memberikan kesalahan yang sama. importjuga tidak bekerja:

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

Apakah QgsMapLayerRegistrydihapus di QGIS3?

tinlyx
sumber

Jawaban:

27

Ya itu telah dihapus, tetapi ada alternatif.

Perubahan API 3.0 tercantum di sini:

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

QgsMapLayerRegistry: Fungsinya telah dipindahkan ke QgsProject.

Alasan utamanya adalah, bahwa QgsMapLayerRegistry adalah / adalah singleton dan oleh karena itu hanya satu registry yang bisa ada. Dengan dihilangkannya kendala ini, penghalang jalan utama tidak memungkinkan untuk mengimplementasikan hal-hal baru seperti membuka banyak proyek secara berdampingan.

Matthias Kuhn
sumber
Saya pikir jawabannya masih belum lengkap.
Abhijit Gujar
2
Saya pikir Anda perlu memberikan lebih banyak informasi mengapa menurut Anda jawabannya masih belum lengkap.
Matthias Kuhn
jika Anda menggunakan QgsProject.instance () bagaimana cara mengatasi masalah singleton?
Mickey Perlstein
@MickeyPerlstein Anda benar, jika Anda menggunakan QgsProject.instance () itu tidak terpecahkan. Namun, aplikasi mandiri sekarang sudah dapat diimplementasikan dengan beberapa proyek dan kode server QGIS juga dipindahkan ke arah ini. Dalam jangka panjang, QgsProject.instance () mungkin benar-benar hilang.
Matthias Kuhn
saya tidak mengerti bagaimana beralih dari menggunakan singleton pada satu bagian ke singleton pada bagian lain mengubah kemampuan untuk menjalankan beberapa instance (yang tetap menerima instance singleton yang sama (menurut definisi) ... tidakkah lebih masuk akal untuk memiliki aplikasi tunggal yang menjalankan instance? ini juga akan memungkinkan interopabilitas dan ekstensibilty yang jauh lebih mudah (jenis seperti microsoft office SDK di mana Anda dapat terhubung ke instance kantor yang ada atau membuka instance baru
Mickey Perlstein