processing.getObject () en QGIS 3

9

Parece que processing.getObject()ya no está disponible en QGIS.

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

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

¿Hay una nueva forma de usar get.Object?

Mar lunar
fuente
El método 'processing.getObject ()' todavía está disponible en QGIS.
xunilk
1
No se transfiera a qgis 3 todavía: la API no se ha congelado, por lo que hará un trabajo adicional para usted cuando se realice el lanzamiento. Si desea causar trabajo por sí mismo, la guía de portabilidad del procesamiento del trabajo en progreso se encuentra en github.com/qgis/QGIS/pull/4841/files
ndawson

Respuestas:

4

Tengo una copia del proyecto QGIS github localmente, tiene unos meses pero pude encontrar dónde cambió esto.

Vale la pena consultar la lista de cambios de API , que menciona esto

dataobjects.getLayerFromString () fue eliminado. Utilice QgsProcessingUtils.mapLayerFromString () en su lugar.

Utilizando anotaciones de línea git pude rastrear esto hasta un cambio realizado hace unos meses ...

parece que algunos métodos (incluido getObject ) fueron refactorizados y reemplazados con un solo 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.
    """
    ...

Pero desde entonces se ha movido a QgsProcessingUtils .

Entonces podrías intentar usar QgsProcessingUtils.mapLayerFromString()

Si usa QGIS 2.x, aún debería poder usar getObject () como antes (puede verificar usando print(processing.__dict__['getObject'])

Steven Kay
fuente
0

El método 'processing.getObject ()' todavía está disponible en QGIS. Se puede observar en la imagen neta:

ingrese la descripción de la imagen aquí

Entonces, la solución es la siguiente:

>>>import processing
>>>layer =  processing.getObject("/home/zeito/pyqgis_data/polygon8.shp")
>>>layer
<qgis._core.QgsVectorLayer object at 0x9a9c0104>
xunilk
fuente
1
processing.getObject () no está disponible en el maestro actual, que será QGIS v3.0 en meses.
Germán Carrillo
Iba a etiquetar esta pregunta qgis-3.0 pero noté que no hay una etiqueta para esto. Por interés, ¿qué plugin estabas usando allí?
Steven Kay
@StevenKay, hay, simplemente lo etiquetó.
Germán Carrillo
@ GermánCarrillo lo sé. Lo siento, pero no vi el número 3 porque me concentro en que usó en su pregunta una referencia de capa en lugar de una uri como parámetro (posible causa de error).
xunilk