processing.getObject () w QGIS 3


9

Wygląda na processing.getObject()to, że nie jest już dostępny w QGIS.

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

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

Czy istnieje nowy sposób korzystania get.Object?


Metoda „processing.getObject ()” jest nadal dostępna w QGIS.
xunilk

1
Nie przesyłaj jeszcze do qgis 3 - interfejs API nie został zawieszony, więc będziesz pracować dla siebie, kiedy zostanie wydana wersja! Jeśli chcesz wywołać pracę dla siebie, przewodnik dotyczący przenoszenia przetwarzania w toku znajduje się na stronie github.com/qgis/QGIS/pull/4841/files
ndawson

Odpowiedzi:


4

Mam lokalnie kopię projektu github QGIS, ma on kilka miesięcy, ale udało mi się dowiedzieć, gdzie się to zmieniło.

Warto sprawdzić listę zmian API , która o tym wspomina

dataobjects.getLayerFromString () został usunięty. Zamiast tego użyj QgsProcessingUtils.mapLayerFromString ().

Za pomocą adnotacji linii git udało mi się prześledzić to do zmiany dokonanej kilka miesięcy temu ...

to wygląda tak, jakby kilka metod (w tym getObject ) zostały refactored i zastąpiony pojedynczym getLayerFromString () metody

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

Ale od tego czasu został przeniesiony do QgsProcessingUtils .

Więc możesz spróbować użyć QgsProcessingUtils.mapLayerFromString()

Jeśli używasz QGIS 2.x, nadal powinieneś być w stanie używać getObject () jak poprzednio (możesz to sprawdzić za pomocą print(processing.__dict__['getObject'])


0

Metoda „processing.getObject ()” jest nadal dostępna w QGIS. Można to zaobserwować na obrazie netto:

wprowadź opis zdjęcia tutaj

Obejście jest następujące:

>>>import processing
>>>layer =  processing.getObject("/home/zeito/pyqgis_data/polygon8.shp")
>>>layer
<qgis._core.QgsVectorLayer object at 0x9a9c0104>

1
processing.getObject () nie jest dostępne w bieżącym systemie głównym, którym będzie QGIS v3.0 za kilka miesięcy.
Germán Carrillo

Chciałem otagować to pytanie qgis-3.0, ale zauważyłem, że nie ma dla niego tagu. Zainteresowanych, jakiej wtyczki tam używałeś?
Steven Kay,

@StevenKay, jest, właśnie otagowano.
Germán Carrillo

@ GermánCarrillo Wiem to. Przepraszam, ale nie widziałem cyfry 3, ponieważ skupiam się na tym, że użył w swoim pytaniu odniesienia do warstwy zamiast parametru uri jako parametru (możliwa przyczyna błędu).
xunilk
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.