processing.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หรือไม่?


วิธีการ 'processing.getObject ()' ยังคงมีอยู่ใน QGIS
xunilk

1
อย่าพอร์ตไปยัง qgis 3 - API ยังไม่หยุดนิ่งดังนั้นคุณจะทำงานให้ตัวเองได้มากขึ้นเมื่อมีการเปิดตัว! หากคุณต้องการทำงานให้ตัวเองคู่มือการดำเนินการย้ายพอร์ตอยู่ที่github.com/qgis/QGIS/pull/4841/files
ndawson

คำตอบ:


4

ฉันมีสำเนาของโครงการ github QGIS ในพื้นที่เป็นเวลาไม่กี่เดือน แต่ฉันสามารถหาที่การเปลี่ยนแปลงนี้

ควรตรวจสอบรายการการเปลี่ยนแปลง APIซึ่งกล่าวถึงสิ่งนี้

dataobjects.getLayerFromString () ถูกลบแล้ว ใช้ QgsProcessingUtils.mapLayerFromString () แทน

การใช้คำอธิบายประกอบในบรรทัด git ฉันสามารถติดตามสิ่งนี้กลับไปสู่การเปลี่ยนแปลงได้เมื่อไม่กี่เดือนที่ผ่านมา ...

มันดูเหมือนว่าไม่กี่วิธี (รวมgetobject ) ถูก refactored ออกและแทนที่ด้วยเดียว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

วิธี 'processing.getObject ()' ยังคงมีอยู่ใน QGIS มันสามารถสังเกตได้ที่ภาพสุทธิ:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นวิธีแก้ปัญหามีดังนี้:

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

1
processing.getObject () ไม่พร้อมใช้งานในต้นแบบปัจจุบันซึ่งจะเป็น QGIS v3.0 ในเดือน
Germán Carrillo

ฉันจะติดแท็กคำถามนี้ qgis-3.0 แต่สังเกตว่าไม่มีแท็กสำหรับสิ่งนี้ ปลั๊กอินที่คุณใช้อยู่นั้นน่าสนใจใช่ไหม?
Steven Kay

@StevenKay มีเพียงแค่ติดแท็ก
Germán Carrillo

@ GermánCarrilloฉันรู้ว่า ขออภัยฉันไม่เห็นหมายเลข 3 เพราะฉันมุ่งเน้นไปที่สิ่งที่เขาใช้ในคำถามของเขาคือการอ้างอิงเลเยอร์แทนพารามิเตอร์ uri เป็นพารามิเตอร์ (สาเหตุที่เป็นไปได้ของข้อผิดพลาด)
xunilk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.