अजगर सांत्वना से pyQGIS में क्लिप समारोह बुला?


11

क्या पायथन कंसोल से QQGIS में क्लिप फ़ंक्शन को कॉल करने का एक तरीका है? यह वेक्टर मेनू में जियोप्रोसेसिंग टूल के तहत पाया जाता है।


ठीक है, मैंने पहले एकलपार्ट्स फ़ंक्शन के लिए मल्टीपार्ट्स का उपयोग करके इसे ठीक किया। तब यह काम करता है।
Toke

जवाबों:


11

सुनिश्चित करें कि आप प्रसंस्करण टूलबॉक्स से फ़ंक्शन प्राप्त कर सकते हैं। इसका उपयोग कैसे करें: 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 के लिए यह प्रश्न देखें:

QGIS 3.0 प्रोसेसिंग में नया अल्जीलिस्ट और अल्गेल्प क्या है?


इस विषय को फिर से जीवन में लाने के लिए क्षमा करें, लेकिन इस काम को कभी नहीं किया, और अब मुझे फिर से इसकी आवश्यकता है। पाइथन कंसोल में मुझे दो लेयर मिलते हैं Layer = qgis.utils.iface.activeLayer()और InputLayer = qgis.utils.iface.activeLayer()। फिर मैं उपयोग करता हूं processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")और क्लिपर नाम के साथ नई परत को जोड़ दिया जाता है । लेकिन परत खाली है। अगर मैं Qgis के भीतर क्लिप फ़ंक्शन के साथ इन दो परतों का उपयोग करता हूं, तो आउटपुट परत में क्लिपिंग से लाइनें हैं। जो कोई भी गलत हो सकता है? मुझे कोई त्रुटि नहीं मिलती है।
Toke

यह काम करता है अगर मैं दो बहुभुज का उपयोग करता हूं, लेकिन मेरी एक परत एक पंक्ति है और बहुभुज नहीं है। इसमें कई लाइनें शामिल हैं, और मैं इस परत का उपयोग कतरियों में करते समय कतरन के लिए कर सकता हूं।
Toke

2
आपके पास उन विशेषताओं को रखने की आवश्यकता है जिन्हें आप चयनित क्लिप करना चाहते हैं। मैंने इसे दर्शाने के लिए उत्तर संपादित किया है।
श्री पर्पल

वास्तव में शेपफाइल बनाए बिना कोई ऐसा कैसे करेगा? मेरे पास सैकड़ों डिस्क-आकार के बहुभुजों के साथ एक परत है जिसे मैं बिंदु डेटा की एक परत के लिए प्रत्येक ओवरले के रूप में उपयोग करके, इसके माध्यम से पुनरावृत्त करना चाहता हूं। क्या मुझे किसी तरह QgsFeature ऑब्जेक्ट की सूची मिल सकती है?
जे। टेलर

आपको यह पूछना चाहिए कि एक अलग प्रश्न के रूप में
श्री बैंगनी

5

यह मानते हुए कि आपके पास एक परत है जिसे "ओवरले" कहा जाता है और दूसरे को "लेयर_टो_क्लिप" कहा जाता है।

# 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")

0

नवीनतम 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)

नोट: एल्गोरिदम के आउटपुट में मुख्य परत के समान ही ज्यामिति होगी


संदर्भ:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.