अजगर के साथ `प्रसंस्करण` तक पहुँचना


16

मैं एक स्टैंडअलोन स्क्रिप्ट से क्यूजीआईएस के बाहर पायथन में विस्फोट लाइनों के फ़ंक्शन का उपयोग करना चाहता हूं ।

इसका उपयोग करने के लिए मुझे किस मॉड्यूल को लोड करना होगा?

मैं कैसे पहुंच सकता हूं processing?

from qgis.core import *

layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')

processing.runalg('qgis:explodelines', layerInput, 'temp.shp')

2
मुझे लगता है कि आपको उपयोग करना होगा import processing
जोसफ

@ जोसेफ विशिष्ट नहीं होने के लिए क्षमा करें: लेकिन मैं इसे स्टैंडअलोन स्क्रिप्ट से एक्सेस करना चाहता हूं।
ustroetz

अहह कोई चिंता नहीं :)। उस मामले में, माफी लेकिन मुझे नहीं पता क्योंकि मैं हमेशा इसे QGIS के भीतर चलाता हूं। उम्मीद है कि अन्य लोग सलाह देंगे।
जोसेफ

हाय @ustroetz, क्या आपने इसे अपनी स्टैंडअलोन स्क्रिप्ट से चलाने का प्रबंधन किया था? मैं पूछता हूं क्योंकि मैं बाहरी स्क्रिप्ट चलाने की कोशिश कर रहा हूं।
जोसफ

@ जोसेफ नहीं, मैंने नहीं
ustroetz

जवाबों:


25

अद्यतन 2018/04/24: कैसे QGIS में यह करने के लिए v3.x देखें यहाँ


QGIS v2.x के लिए

अंत में स्टैंडअलोन PyQGIS लिपियों के माध्यम से प्रसंस्करण एल्गोरिदम चलाने का उचित तरीका मिला।

प्रसंस्करण प्लगइन संस्करण 2.2.0-2 का उपयोग करके, आप निम्न स्क्रिप्ट आज़मा सकते हैं:

# Prepare the environment
import sys
from qgis.core import *
from PyQt4.QtGui import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Prepare processing framework 
sys.path.append('/home/user/.qgis2/python/plugins') # Folder where Processing is located
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *

# Run the algorithm
layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')
general.runalg('qgis:explodelines', layerInput, 'temp.shp')

# Exit applications
QgsApplication.exitQgis()
QApplication.exit()

नए प्रसंस्करण संस्करण में स्थित हो सकता है /usr/share/qgis/python/plugins, इसलिए आपको sys.path.append('/usr/share/qgis/python/plugins')तदनुसार उपयोग करने की आवश्यकता हो सकती है ।

मुझे त्रुटि में काम करने का उदाहरण मिला : एल्गोरिथम नहीं मिला , जो कि क्यूजीस-देव मेलिंग-लिस्ट चर्चा के आधार पर है


1
प्रसंस्करण प्लगइन पर नहीं हो सकता है '/home/user/.qgis2/python/plugins'। आप QGIS खोलकर और plugins/Manage and install pluginsस्क्रॉल करके नीचे प्रसंस्करण तक स्थान पा सकते हैं और आपको विवरण में स्थापना स्थान दिखाई देगा।
मि। पर्पल

2
मुझे cannot-create-a-qpixmapइस स्टैंड अलोन फंक्शन के बारे में बहुत सारी चेतावनियाँ मिलीं, लेकिन मैं आपको इस सवाल में भी हल कर देता हूँ। gis.stackexchange.com/questions/188074/…
श्रीमान पर्पल

1
आप layerInputरनऑल लाइन को ड्राप और बदलकर स्टैंडअलोन स्क्रिप्ट को और भी सामान्य बना सकते हैं : general.runalg(*sys.argv[1:])यह उल्लेख नहीं करने के लिए कि यह स्क्रिप्ट इस प्रश्न के अनुसार समानांतर जीआईएस प्रसंस्करण का आधार हो सकती है: gis.stackexchange.com/questors.in9961/-
Mr बैंगनी

क्या एक ही फ्रेमवर्क करना संभव है लेकिन एक स्टैंडअलोन पायथन (QGIS के अंदर नहीं) से PLUGINS चलाना? मैंने एल्जीलिस्ट () फ़ंक्शन निष्पादित किया और मैं अपने प्लग इन को अपने QGIS में स्थापित नहीं देख सकता ...
Irene

3

जब तक मुझे इसे करने का सामान्य तरीका काम नहीं मिलेगा, तब तक मैं आपको एक वर्कअराउंड बताऊंगा।

मैं प्रसंस्करण प्लगइन संस्करण 2.2.0-2 का उपयोग करता हूं (मैं आपको इस संस्करण का उपयोग करने का सुझाव देता हूं), जो /home/germap/.qgis2/python/plugins/मेरे कंप्यूटर पर स्थापित है । आपको इस फ़ोल्डर का स्थान जानना होगा, क्योंकि आप प्रसंस्करण मॉड्यूल को वहां से आयात करते हैं।

जब से आप प्रदाता ( qgis) और एल्गोरिथ्म ( explodelines) को जानते हैं, आप /home/germap/.qgis2/python/plugins/processing/algs/qgis/एक्सप्लोड लाइन स्क्रिप्ट का नाम लेने के लिए देख सकते हैं: Explode.pyयह जानकारी आपको एल्गोरिथ्म को सीधे अपने पायथन स्टैंडअलोन स्क्रिप्ट में आयात करने की अनुमति देती है।

इसलिए, पायथन कंसोल खोलें और निम्न स्क्रिप्ट की प्रतिलिपि बनाएँ (मैं GNU / Linux का उपयोग करता हूं, इसलिए पर्यावरण चर डिफ़ॉल्ट रूप से सेट किए जाते हैं, जिससे मुझे एक हवा में qgis और PyQt4 लाइब्रेरी आयात करने की अनुमति मिलती है):

# Prepare the environment
import sys
from PyQt4.QtGui import *
from qgis.core import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Tell Python where you will get processing from
sys.path.append('/home/germap/.qgis2/python/plugins')

# Reference the algorithm you want to run
from processing.algs.qgis.Explode import *
alg = Explode() 

# Set input and output
inLayer = QgsVectorLayer('/home/user/data/in.shp', 'input', 'ogr')
outLayer = '/home/user/data/out.shp'
alg.setParameterValue('INPUT', inLayer)
alg.setOutputValue('OUTPUT', outLayer)

# Run the algorithm
from processing.core.SilentProgress import SilentProgress
progress = SilentProgress()
alg.processAlgorithm(progress)

यदि आपको त्रुटि संदेश नहीं मिलता है, तो यह बात है। आउटपुट लेयर को आपके द्वारा निर्दिष्ट आउटपुट पथ में सहेजा गया है ( /home/user/data/out.shp)

नोट: एक सामान्य तरीके के बारे में (यानी, नाम से एल्गोरिदम को कॉल करना), मुझे कुछ परेशानियां मिली हैं जिन्हें पोस्ट करने से पहले मुझे हल करना होगा। जैसे ही मुझे यह काम करने को मिलेगा, मैं इसे पोस्ट कर दूंगा।

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