Cara saya mengatur tugas Anda adalah dengan membuat skrip khusus yang memberikan fleksibilitas lebih besar daripada pemodel tetapi masih dapat menyediakan antarmuka yang mirip dengan penggunanya. Anda dapat membuatnya dari:
Memproses Kotak Alat> Skrip> Alat> Buat skrip baru
Kemudian salin / tempel skrip di bawah ini dan simpan ke C:/Users/You/.qgis2/processing/scripts
.
Skrip di bawah ini mencoba meniru apa yang dilakukan model Anda. Skrip ini bukan solusi akhir (terutama karena paramater yang saya gunakan untuk atribut titik - temu dan gabung dengan alat lokasi mungkin berbeda dari yang Anda tetapkan) tetapi mudah-mudahan Anda bisa menggunakannya sebagai templat untuk memperluas dan meningkatkan skrip yang sesuai dengan kebutuhan Anda . Untuk menjalankannya, cukup pilih dari Toolbox Pemrosesan setelah disimpan.
Saya pikir skrip melakukan apa yang Anda minta:
Dua pesanan pertama adalah wajib sehingga akan diproses.
IF
pernyataan digunakan untuk memastikan bahwa setiap pesanan yang berhasil hanya akan diproses jika yang benar mendahuluinya (misalnya order4 hanya akan berjalan jika order3 telah dipilih).
Selain itu, pesan dicetak di Konsol Python yang menunjukkan pesanan mana yang sedang diproses.
##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)
Di bawah ini adalah tangkapan layar antarmuka saat menjalankan skrip (yang seharusnya terlihat mirip dengan ketika Anda menjalankan model Anda):
Beberapa hal yang perlu diperhatikan:
Kotak merah berisi parameter wajib
Kotak hijau berisi parameter opsional
Kotak biru berisi parameter wajib
Kotak hitam berisi parameter opsional untuk hasil keluaran. Script hanya akan menampilkan layer jika urutan terkait dipilih (misalnya jika input untuk order5 tidak dipilih tetapi output untuk itu, kesalahan akan terjadi). Oleh karena itu, pengguna harus memilih input dan output yang relevan. Ini tidak disengaja tetapi secara pribadi saya pikir ini adalah cara yang baik untuk memaksa pengguna memeriksa parameter dengan cermat.
Saya menggunakan QGIS 2.12.3 (dengan Memproses plugin versi 2.12.2).