Görevinizi ayarlayacağım şekilde , modelleyiciden daha fazla esneklik sağlayan, ancak yine de kullanıcılarına benzer bir arayüz sağlayabilen özel bir komut dosyası oluşturmak olurdu . Şunlardan bir tane oluşturabilirsiniz:
İşleme Araç Kutusu> Komut Dosyaları> Araçlar> Yeni komut dosyası oluştur
Ardından aşağıdaki komut dosyasını kopyalayıp yapıştırın ve içine kaydedin C:/Users/You/.qgis2/processing/scripts
.
Aşağıdaki komut dosyası, modelinizin yaptıklarını taklit etmeye çalışır. Komut dosyası son bir çözüm değildir (özellikle Konum araçları tarafından Kesişim ve Birleştirme özelliği için kullandığım paramatörler tanımladığınızdan farklı olabilir), ancak umarım bunu ihtiyacınıza göre komut dosyasını genişletmek ve geliştirmek için bir şablon olarak kullanabilirsiniz . Çalıştırmak için, kaydedildikten sonra İşleme Araç Kutusu'ndan seçmeniz yeterlidir .
Bence senaryo istediğini yapıyor:
İlk iki emir zorunlu olduğundan işlenecektir.
IF
ifadeleri, sonraki siparişlerin yalnızca doğru olanın ondan önce gelmesi durumunda işlenmesini sağlamak için kullanılır (örneğin, sipariş4 yalnızca sipariş3 seçildiyse çalışır).
Ayrıca, Python Konsolunda hangi siparişlerin işlendiğini gösteren mesajlar yazdırılır .
##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)
Komut dosyasını çalıştırırken arayüzün bir ekran görüntüsü (modelinizi çalıştırdığınızda benzer görünmesi gerekir):
Unutulmaması gereken birkaç nokta:
Kırmızı kutu zorunlu parametreler içeriyor
Yeşil kutu isteğe bağlı parametreler içerir
Mavi kutu zorunlu parametre içeriyor
Kara kutu, sonuçları çıktılamak için isteğe bağlı parametreler içerir. Komut dosyası yalnızca ilişkili sipariş seçildiyse katman çıktısı verir (örn. Order5 için girdi seçilmez ancak çıktısı seçilirse, bir hata oluşur). Bu nedenle, kullanıcı girişleri ve ilgili çıkışları seçmelidir. Bu kasıtlı değildi ama kişisel olarak kullanıcıyı parametreleri dikkatlice kontrol etmeye zorlamanın iyi bir yolu olduğunu düşünüyorum.
Ben (birlikte QGIS 2.12.3 kullanılan İşleme sürüm 2.12.2 eklentisi).