обработка.getObject () в QGIS 3


9

Здається, що processing.getObject()більше немає в QGIS.

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

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

Чи є новий спосіб використання get.Object?


Метод 'treatment.getObject ()' все ще доступний у QGIS.
xunilk

1
Не портуйте до qgis 3 ще - API не заморожений, тому ви будете робити додаткову роботу для себе, коли буде зроблено реліз! Якщо ви хочете створити роботу для себе, посібник з перенесення роботи, що перебуває в процесі обробки, знаходиться за адресою github.com/qgis/QGIS/pull/4841/files
ndawson

Відповіді:


4

У мене є локальна копія проекту github QGIS, це вже кілька місяців, але я зміг знайти, де це змінилося.

Варто перевірити список змін API , де про це йдеться

dataobjects.getLayerFromString () було видалено. Використовуйте замість цього QgsProcessingUtils.mapLayerFromString ().

Використовуючи анотації на git line, я зміг простежити це за змінами, внесеними кілька місяців тому ...

це виглядає , як якщо б кілька методів ( в тому числі GetObject були перероблені) і замінені на єдиний 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.
    """
    ...

Але відтоді він переміщений до QgsProcessingUtils .

Тож ви можете спробувати використовувати QgsProcessingUtils.mapLayerFromString()

Якщо ви використовуєте QGIS 2.x, ви все одно зможете використовувати getObject (), як і раніше (можна перевірити за допомогою print(processing.__dict__['getObject'])


0

Метод 'treatment.getObject ()' все ще доступний у QGIS. Це можна спостерігати при чистому зображенні:

введіть тут опис зображення

Отже, вирішення полягає в наступному:

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

1
обработка.getObject () недоступна в поточному майстрі, який буде QGIS v3.0 за місяці.
Germán Carrillo

Я збирався помітити це питання qgis-3.0, але помітив, що для цього немає тегів. Який плагін ви тут не цікавили?
Стівен Кей

@StevenKay, є, просто позначив це.
Germán Carrillo

@ GermánCarrillo Я це знаю. Вибачте, але я не побачив номер 3, тому що я зосередився на тому, що він використовував у своєму питанні посилання на шар, а не uri як параметр (можлива причина помилки).
xunilk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.