processing.getObject () di QGIS 3

9

Tampaknya processing.getObject()tidak lagi tersedia di QGIS.

from PyQt5.QtCore import *
from qgis.core import *
#...
layer = processing.getObject(layer)

# -> ...module 'processing' has no attribute 'getObject'

Apakah ada cara baru untuk digunakan get.Object?

Laut Bulan
sumber
Metode 'processing.getObject ()' masih tersedia di QGIS.
xunilk
1
Jangan porting ke qgis 3 - API belum beku, jadi Anda akan bekerja ekstra untuk diri sendiri ketika rilis dibuat! Jika Anda ingin membuat pekerjaan untuk diri Anda sendiri, pekerjaan yang sedang diproses panduan porting sedang di github.com/qgis/QGIS/pull/4841/files
ndawson

Jawaban:

4

Saya memiliki salinan proyek github QGIS secara lokal, ini berumur beberapa bulan tetapi saya dapat menemukan di mana ini berubah.

Ada baiknya memeriksa daftar perubahan API , yang menyebutkan ini

dataobjects.getLayerFromString () telah dihapus. Gunakan QgsProcessingUtils.mapLayerFromString () sebagai gantinya.

Menggunakan anotasi git line saya dapat melacak ini kembali ke perubahan yang dibuat beberapa bulan yang lalu ...

tampak seolah-olah beberapa metode (termasuk getObject ) yang refactored keluar dan digantikan dengan satu getLayerFromString () metode

def getLayerFromString(string, forceLoad=True):
    """Returns an object (layer/table) given a source definition.

    if forceLoad is true, it tries to load it if it is not currently open
    Otherwise, it will return the object only if it is loaded in QGIS.
    """
    ...

Tapi sejak itu sudah dipindahkan ke QgsProcessingUtils .

Jadi Anda bisa mencoba menggunakan QgsProcessingUtils.mapLayerFromString()

Jika menggunakan QGIS 2.x, Anda masih dapat menggunakan getObject () seperti sebelumnya (dapat memeriksa menggunakan print(processing.__dict__['getObject'])

Steven Kay
sumber
0

Metode 'processing.getObject ()' masih tersedia di QGIS. Itu dapat diamati pada gambar bersih:

masukkan deskripsi gambar di sini

Jadi, solusinya adalah sebagai berikut:

>>>import processing
>>>layer =  processing.getObject("/home/zeito/pyqgis_data/polygon8.shp")
>>>layer
<qgis._core.QgsVectorLayer object at 0x9a9c0104>
xunilk
sumber
1
processing.getObject () tidak tersedia di master saat ini, yang akan menjadi QGIS v3.0 dalam beberapa bulan.
Germán Carrillo
Saya akan menandai pertanyaan ini qgis-3.0 tetapi melihat tidak ada tag untuk ini. Yang tidak menarik plugin apa yang Anda gunakan di sana?
Steven Kay
@ SevenKay, ada, baru saja memberi tag.
Germán Carrillo
@ GermánCarrillo Saya tahu itu. Maaf, tapi saya tidak melihat nomor 3 karena saya fokus pada yang ia gunakan dalam pertanyaannya referensi layer bukan uri sebagai parameter (kemungkinan penyebab kesalahan).
xunilk