processing.getObject () no QGIS 3

9

Parece que processing.getObject()não está mais disponível no QGIS.

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

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

Existe uma nova maneira de usar get.Object?

Mar Lunar
fonte
O método 'processing.getObject ()' ainda está disponível no QGIS.
xunilk
11
Não mude para o qgis 3 ainda - a API não congelou; portanto, você estará fazendo um trabalho extra quando a versão for lançada! Se você quiser causa trabalho para si mesmo, o trabalho no processamento de progresso guia portar está em github.com/qgis/QGIS/pull/4841/files
ndawson

Respostas:

4

Tenho uma cópia do projeto github QGIS localmente, há alguns meses, mas consegui descobrir onde isso mudou.

Vale a pena conferir a lista de alterações na API , que menciona isso

dataobjects.getLayerFromString () foi removido. Use QgsProcessingUtils.mapLayerFromString ().

Usando anotações de linha git, pude rastrear isso de volta a uma alteração feita há alguns meses ...

parece que alguns métodos (incluindo getObject ) foram refatorados e substituídos por um único método getLayerFromString ()

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.
    """
    ...

Mas desde então, foi movido para QgsProcessingUtils .

Então você pode tentar usar QgsProcessingUtils.mapLayerFromString()

Se estiver usando o QGIS 2.x, você ainda poderá usar o getObject () como antes (pode verificar usando print(processing.__dict__['getObject'])

Steven Kay
fonte
0

O método 'processing.getObject ()' ainda está disponível no QGIS. Pode ser observado na imagem líquida:

insira a descrição da imagem aqui

Portanto, a solução alternativa é a seguinte:

>>>import processing
>>>layer =  processing.getObject("/home/zeito/pyqgis_data/polygon8.shp")
>>>layer
<qgis._core.QgsVectorLayer object at 0x9a9c0104>
xunilk
fonte
11
processing.getObject () não está disponível no mestre atual, que será o QGIS v3.0 em meses.
Germán Carrillo
Eu estava indo para marcar esta pergunta qgis-3.0, mas notei que não há uma marca para isso. Fora de interesse, qual plugin você estava usando lá?
Steven Kay
@StevenKay, existe, apenas o marcou.
Germán Carrillo
@ GermánCarrillo Eu sei disso. Desculpe, mas não vi o número 3 porque me concentro no fato de que ele usou na pergunta uma referência de camada em vez de uma uri como parâmetro (possível causa de erro).
xunilk