जवाबों:
सुनिश्चित करें कि आप प्रसंस्करण टूलबॉक्स से फ़ंक्शन प्राप्त कर सकते हैं। इसका उपयोग कैसे करें: http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html प्रति के अनुसार
कंसोल से आप उपलब्ध सभी एल्गोरिदम की एक सूची प्राप्त कर सकते हैं जिसमें टाइप करके "क्लिप" शब्द है:
import processing
processing.alglist("clip")
तब आप यह जान सकते हैं कि किस प्रकार उपयोग करना सबसे उपयुक्त कार्य है:
processing.alghelp("qgis:clip")
तो बस अपनी स्क्रिप्ट में एल्गोरिथ्म का उपयोग इस प्रकार है:
processing.runalg("qgis:clip",inputlayer,overlaylayer,"output_file.shp")
नोट: एल्गोरिथ्म केवल slected सुविधाओं पर काम करेगा "
ऊपर दिए गए नोट में 3.0+ के लिए अमान्य है जो आपके द्वारा किए जा सकने वाले उदाहरण के लिए है:
print([a.id() for a in gsApplication.processingRegistry().algorithms() if "clip" in a.id()])
आप कर सकते हैं alghelp उदाहरण के लिए:
processing.algorithmHelp("qgis:clip")
QGIS3 के लिए यह प्रश्न देखें:
Layer = qgis.utils.iface.activeLayer()
और InputLayer = qgis.utils.iface.activeLayer()
। फिर मैं उपयोग करता हूं processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")
और क्लिपर नाम के साथ नई परत को जोड़ दिया जाता है । लेकिन परत खाली है। अगर मैं Qgis के भीतर क्लिप फ़ंक्शन के साथ इन दो परतों का उपयोग करता हूं, तो आउटपुट परत में क्लिपिंग से लाइनें हैं। जो कोई भी गलत हो सकता है? मुझे कोई त्रुटि नहीं मिलती है।
यह मानते हुए कि आपके पास एक परत है जिसे "ओवरले" कहा जाता है और दूसरे को "लेयर_टो_क्लिप" कहा जाता है।
# 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")
नवीनतम PyQGIS संस्करण में निम्नानुसार काम करना चाहिए
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)
नोट: एल्गोरिदम के आउटपुट में मुख्य परत के समान ही ज्यामिति होगी
संदर्भ: