QGIS3 प्रसंस्करण एल्गोरिदम का उपयोग स्वसंपूर्ण PyQGIS लिपियों (GUI के बाहर) से किया जा रहा है


24

मैं एक स्क्रिप्ट लिख रहा हूं जो QGIS GUI के बाहर काम करना चाहिए। मैं qgis.core से कुछ API फ़ंक्शन कॉल करता हूं, लेकिन मैं प्रोसेसिंग प्लगइन का उपयोग करना चाहता हूं।

मैं sys.path.append () के साथ प्रसंस्करण आयात करने में सक्षम हूं, लेकिन मैं कोई प्रक्रिया नहीं चला सकता। इसके अलावा, सभी "मूल" अल्ग QgsApplication.processingRegistry () एल्गोरिदम में गायब हैं।

तो क्या इस तरह से प्रोसेसिंग चलाना संभव है? मुझे किसकी याद आ रही है ?

import os, sys
from qgis.core import *
QgsApplication.setPrefixPath('/usr', True)
qgs = QgsApplication([], False)
qgs.initQgis()

sys.path.append('/usr/share/qgis/python/plugins')
from processing.core.Processing import Processing
Processing.initialize()
import processing

layer1 = QgsVectorLayer('data/ROUTE_PRIMAIRE.SHP')
layer2 = QgsVectorLayer('data/ROUTE_SECONDAIRE.SHP')

processing.run('qgis:union', layer1, layer2, 'test.shp') # returns nothing

मैं QGIS 3.0.1 पर हूं - डेबियन 9

जवाबों:


29

आप इस तरह से स्टैंडअलोन (कोई GUI) मोड में QGIS प्रोसेसिंग एल्गोरिथ्म चला सकते हैं:

import sys

from qgis.core import (
     QgsApplication, 
     QgsProcessingFeedback, 
     QgsVectorLayer
)

# See /gis//a/155852/4972 for details about the prefix 
QgsApplication.setPrefixPath('/usr', True)
qgs = QgsApplication([], False)
qgs.initQgis()

# Append the path where processing plugin can be found
sys.path.append('/docs/dev/qgis/build/output/python/plugins')

import processing
from processing.core.Processing import Processing
Processing.initialize()

layer1 = QgsVectorLayer('/path/to/geodata/lines_1.shp', 'layer 1', 'ogr')
layer2 = QgsVectorLayer('/path/to/geodata/lines_2.shp', 'layer 2', 'ogr')

# You can see what parameters are needed by the algorithm  
# using: processing.algorithmHelp("qgis:union")
params = { 
    'INPUT' : layer1,
    'OVERLAY' : layer2, 
    'OUTPUT' : '/path/to/output_layer.gpkg|layername=output'
}
feedback = QgsProcessingFeedback()

res = processing.run('qgis:union', params, feedback=feedback)
res['OUTPUT'] # Access your output layer

देशी एल्गोरिदम

अब, यदि आप एक देशी एल्गोरिदम (अर्थात, मूल प्रदाता से एक एल्गोरिथ्म, जिसका एल्गोरिदम C ++ में लिखा गया है) का उपयोग करना चाहते हैं, तो आपको प्रसंस्करण को प्रारंभ करने के बाद प्रदाता को जोड़ने की आवश्यकता है:

import sys

from qgis.core import (
     QgsApplication, 
     QgsProcessingFeedback, 
     QgsVectorLayer
)
from qgis.analysis import QgsNativeAlgorithms

# See /gis//a/155852/4972 for details about the prefix 
QgsApplication.setPrefixPath('/usr', True)
qgs = QgsApplication([], False)
qgs.initQgis()

# Append the path where processing plugin can be found
sys.path.append('/docs/dev/qgis/build/output/python/plugins')

import processing
from processing.core.Processing import Processing
Processing.initialize()
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())

layer = QgsVectorLayer('/path/to/geodata/lines.shp', 'my layer', 'ogr')

# You can see what parameters are needed by the algorithm  
# using: processing.algorithmHelp("native:extractvertices")
params = {
    'INPUT': layer,
    'OUTPUT': 'memory:'
}
feedback = QgsProcessingFeedback()

res = processing.run("native:extractvertices", params, feedback=feedback)
res['OUTPUT'] # Access your output layer

ठीक काम करता है, धन्यवाद! क्या एक ही समय में डिस्क पर आउटपुट लिखना ठीक है, यदि कोई पथ प्रदान किया गया है?
vidlb

ज़रूर, यह एक बहुत ही उपयोगी विकल्प है।
जर्मेन कैरिलो

1
यह शुद्ध जादू है - अपने विस्तृत समाधानों को साझा करने के लिए धन्यवाद!
root676

@ GermánCarrillo किसी तरह एक बहुत ही समान कोड काम नहीं करते। और देखें: gis.stackexchange.com/questions/286281/…
श्री चे

मैं क्यूजीआईएस प्लगइन में क्यूजीआईएस एल्गोरिथ्म चलाने की कोशिश करता हूं, क्या यह उसी तरह से काम करता है? क्योंकि मैं इसे नहीं चला सकता
ghupf

1

जब मैं ऊपर के रूप में एक देशी एल्गोरिथ्म का उपयोग करने की कोशिश की, "QGNativeAl एल्गोरिदम 'नाम' QESNativeAl एल्गोरिदम 'परिभाषित नहीं है" एक OSGeo4W स्थापित में QGIS 3.4.4 शामिल था। समाधान एक लापता आयात निकला:

from qgis.analysis import QgsNativeAlgorithms

( क्यूजीआईएस 3.4 / 3.6 स्टैंडअलोन स्क्रिप्ट से )

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