Nhiều thuật toán xử lý có một tùy chọn để lưu đầu ra dưới dạng bộ nhớ. Nếu được chạy từ hộp công cụ, điều này hoạt động tốt, bởi vì bạn có thể đánh dấu vào ô "Mở tệp đầu ra sau khi chạy thuật toán".
Nhìn vào mã nguồn cho QGIS, mã để tải lớp bộ nhớ dường như được xác định trong hàm Postprocessing.handleAlgorithmResults
. Hàm sử dụng quyền truy cập vào alg.outputs
danh sách và thực hiện như sau:
for out in alg.outputs:
progress.setPercentage(100 * i / float(len(alg.outputs)))
if out.hidden or not out.open:
continue
if isinstance(out, (OutputRaster, OutputVector, OutputTable)):
try:
if out.value.startswith('memory:'):
layer = out.memoryLayer # NOTE!!
QgsMapLayerRegistry.instance().addMapLayers([layer]) # NOTE!!
else:
# ...
Khi bạn chạy các thuật toán xử lý từ bàn điều khiển, có cách nào để tải lớp mà không truy cập vào đối tượng này không? tôi có thể chạy
processing.runalg("qgis:intersection", layer1, layer2, "memory:")
hoặc thậm chí
processing.runalg("qgis:intersection", layer1, layer2, "memory:myLayerName")
Tuy nhiên tôi không thể tìm ra cách lấy kết quả đầu ra.