Cách tôi thiết lập nhiệm vụ của bạn sẽ là tạo một tập lệnh tùy chỉnh cung cấp tính linh hoạt cao hơn trình tạo mô hình nhưng vẫn có thể cung cấp giao diện tương tự cho người dùng. Bạn có thể tạo một từ:
Hộp công cụ xử lý> Tập lệnh> Công cụ> Tạo tập lệnh mới
Sau đó sao chép / dán đoạn script bên dưới và lưu nó vào C:/Users/You/.qgis2/processing/scripts
.
Kịch bản dưới đây cố gắng mô phỏng những gì mô hình của bạn làm. Kịch bản không phải là giải pháp cuối cùng (đặc biệt là các tham số tôi đã sử dụng cho thuộc tính Giao lộ và Tham gia bởi các công cụ vị trí có thể khác với những gì bạn đã xác định) nhưng hy vọng bạn có thể sử dụng nó làm mẫu để mở rộng và cải thiện tập lệnh phù hợp với nhu cầu của bạn . Để chạy nó, chỉ cần chọn nó từ Hộp công cụ xử lý sau khi nó đã được lưu.
Tôi nghĩ rằng kịch bản làm những gì bạn yêu cầu:
Hai đơn hàng đầu tiên là bắt buộc nên sẽ được xử lý.
IF
các câu lệnh được sử dụng để đảm bảo rằng bất kỳ đơn đặt hàng thành công nào sẽ chỉ được xử lý nếu lệnh chính xác trước nó (ví dụ order4 sẽ chỉ chạy nếu order3 đã được chọn).
Ngoài ra, các thông báo được in trong Bảng điều khiển Python cho biết đơn hàng nào đang được xử lý.
##Example model=name
##Order1=vector
##Order2=vector
##Order3=optional vector
##Order4=optional vector
##Order5=optional vector
##Watershed=vector
##Order2_Wshed=output vector
##Order3_Wshed=output vector
##Order4_Wshed=output vector
##Order5_Wshed=output vector
order1 = processing.getObject(Order1)
order2 = processing.getObject(Order2)
order3 = processing.getObject(Order3)
order4 = processing.getObject(Order4)
order5 = processing.getObject(Order5)
watershed = processing.getObject(Watershed)
if Order3 is None:
print 'Processing Order1 and Order2'
else:
print 'Processing Order1, Order2 and Order3'
if Order4 is not None:
print 'Processing Order1, Order2, Order3 and Order4'
if Order5 is not None:
print 'Processing Order1, Order2, Order3, Order4 and Order5'
output_1a = processing.runalg("qgis:intersection", order1, watershed, None)
output_1b = processing.runalg("qgis:joinattributesbylocation", output_1a['OUTPUT'], watershed, u'intersects', 0, 0, '', 0, None)
output_2a = processing.runalg("qgis:intersection", order2, watershed, None)
output_2b = processing.runalg("qgis:joinattributesbylocation", output_2a['OUTPUT'], output_1b['OUTPUT'], u'intersects', 0, 0, '', 0, Order2_Wshed)
if Order3 is None:
pass
else:
output_3a = processing.runalg("qgis:intersection", order3, watershed, None)
output_3b = processing.runalg("qgis:joinattributesbylocation", output_3a['OUTPUT'], output_2b['OUTPUT'], u'intersects', 0, 0, '', 0, Order3_Wshed)
if Order4 is None:
pass
else:
output_4a = processing.runalg("qgis:intersection", order4, watershed, None)
output_4b = processing.runalg("qgis:joinattributesbylocation", output_4a['OUTPUT'], output_3b['OUTPUT'], u'intersects', 0, 0, '', 0, Order4_Wshed)
if Order5 is None:
pass
else:
output_5a = processing.runalg("qgis:intersection", order5, watershed, None)
output_5b = processing.runalg("qgis:joinattributesbylocation", output_5a['OUTPUT'], output_4b['OUTPUT'], u'intersects', 0, 1, 'sum, mean', 0, Order5_Wshed)
Dưới đây là ảnh chụp màn hình của giao diện khi chạy tập lệnh (trông giống như khi bạn chạy mô hình của mình):
Vài điều cần lưu ý:
Hộp màu đỏ chứa các tham số bắt buộc
Hộp màu xanh lá cây chứa các tham số tùy chọn
Hộp màu xanh chứa tham số bắt buộc
Hộp đen chứa các tham số tùy chọn cho kết quả đầu ra. Kịch bản sẽ chỉ xuất các lớp đầu ra nếu thứ tự liên quan được chọn (ví dụ: nếu đầu vào cho order5 không được chọn nhưng đầu ra cho nó thì sẽ xảy ra lỗi). Do đó, người dùng phải chọn đầu vào và đầu ra có liên quan. Đây không phải là cố ý nhưng cá nhân tôi nghĩ rằng đó là một cách tốt để buộc người dùng kiểm tra các thông số một cách cẩn thận.
Tôi đã sử dụng QGIS 2.12.3 (với Xử lý plugin phiên bản 2.12.2).