Yanıtlar:
Tabii İşlevi işlem araç kutusundan alabilirsiniz. Bunu nasıl kullanacağınız: http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html uyarınca
Konsoldan, "klip" kelimesini içeren tüm algoritmaların bir listesini yazarak alabilirsiniz:
import processing
processing.alglist("clip")
Ardından, en uygun fonksiyonun nasıl göründüğünü nasıl kullanacağınızı öğrenebilirsiniz:
processing.alghelp("qgis:clip")
Ardından komut dosyanızdaki algoritmayı aşağıdaki gibi kullanın:
processing.runalg("qgis:clip",inputlayer,overlaylayer,"output_file.shp")
Not: Algoritma yalnızca kesilmiş özelliklerde çalışır "
Yukarıdaki kod, alglist örneği için 3.0+ için geçersizdir:
print([a.id() for a in gsApplication.processingRegistry().algorithms() if "clip" in a.id()])
alghelp örneği için şunları yapabilirsiniz:
processing.algorithmHelp("qgis:clip")
QGIS3 için şu soruya bakın:
Layer = qgis.utils.iface.activeLayer()
and ile alıyorum InputLayer = qgis.utils.iface.activeLayer()
. Sonra kullanıyorum processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")
ve yeni katman, Katmanlar menüsüne Kırpılmış adıyla ekleniyor . Ancak katman boş. Bu iki katmanı Qgis içindeki klip işleviyle birlikte kullanırsam, çıktı katmanında kırpma çizgileri olur. Ne yanlış olabilir ki? Herhangi bir hata almıyorum.
"Katman" ve "layer_to_clip" adında bir katmanınız olduğu varsayılarak.
# get the overlay layer in the console
overlay_layer = [x for x in iface.legendInterface().layers() if x.name() == 'overlay'][0]
# get the layer to clip in the console
layer_to_clip = [x for x in iface.legendInterface().layers() if x.name() == 'layer_to_clip'][0]
# run the algorithm and output the results in /tmp/output.shp
processing.runalg("qgis:clip", overlay_layer, layer_to_clip, "/tmp/output.shp")
En son PyQGIS sürümünde aşağıdaki gibi çalışmalıdır
from qgis.core import *
def clipping(layer_1, layer_2):
layer_clip = processing.run('qgis:clip',
{'INPUT': layer_1,
'OVERLAY': layer_2,
'OUTPUT': "memory:"}
)["OUTPUT"]
return QgsProject.instance().addMapLayer(layer_clip)
your_layer_1 = QgsProject.instance().mapLayersByName('layer_name_1')[0] # main layer
your_layer_2 = QgsProject.instance().mapLayersByName('layer_name_2')[0] # secondary layer
clipping(your_layer_1, your_layer_2)
Not: Algoritmanın çıkışı, ana katmanla aynı geometriye sahip olacaktır
Referanslar: