স্বতন্ত্র পাইকিজিআইজিএস স্ক্রিপ্টগুলি (জিইউআই এর বাইরে) থেকে কিউজিআইএস 3 প্রসেসিং অ্যালগরিদম ব্যবহার করে


24

আমি একটি স্ক্রিপ্ট লিখছি যা অবশ্যই QGIS GUI এর বাইরে কাজ করবে। আমি qgis.core থেকে কিছু API ফাংশন কল করি তবে আমি প্রসেসিং প্লাগইনটি ব্যবহার করতে চাই।

আমি sys.path.append () দিয়ে প্রসেসিং আমদানি করতে সক্ষম তবে আমি কোনও প্রক্রিয়া চালাতে পারি না। তদুপরি, সমস্ত "নেটিভ" অ্যালগগুলি Qgs অ্যাপ্লিকেশন.প্রসেসিংরেজিস্ট্রি () এ্যালগরিদম () এ অনুপস্থিত

তাহলে কী এভাবে প্রক্রিয়াজাতকরণ চালানো সম্ভব? আমি কী মিস করছি?

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

আমি কিউজিআইএস 3.0.1 - ডেবিয়ান 9 এ আছি

উত্তর:


29

আপনি এইভাবে স্ট্যান্ডলোন (কোনও জিইউআই নেই) মোডে কিউজিআইএস প্রসেসিং অ্যালগরিদম চালাতে পারেন:

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

নেটিভ অ্যালগোরিদম

এখন, আপনি যদি নেটিভ অ্যালগরিদম ব্যবহার করতে চান (যেমন, স্থানীয় সরবরাহকারীর কাছ থেকে একটি অ্যালগরিদম, যার আলগোরিদিম সি ++ তে লেখা থাকে), প্রসেসিং শুরু করার পরে আপনাকে সরবরাহকারী যুক্ত করতে হবে:

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
এটি খাঁটি যাদু - আপনার বিস্তারিত সমাধান ভাগ করে নেওয়ার জন্য ধন্যবাদ!
রুট 676

@ জের্মানসিরিলো কোনওরকম একটি খুব অনুরূপ কোড কাজ করে না। আরও দেখুন: gis.stackexchange.com/questions/286281/…
মিঃ চে

আমি কিউজিআইএস প্লাগইনে কিউজিআইএস অ্যালগরিদম চালানোর চেষ্টা করি, এটি কি একইভাবে কাজ করে? কারণ আমি এটি চালাতে পারি না
gHupf

1

আমি যখন একটি ওএসজিও 4 ডাব্লু ইনস্টলটিতে কিউজিআইএস ৩.৪.৪ অন্তর্ভুক্ত করেছি, উপরের মতো একটি নেটিভ অ্যালগরিদম ব্যবহার করার চেষ্টা করেছি তখন আমার একটি ত্রুটি ছিল "নেম এরির: নাম 'কিগস নেটিভ অ্যালগোরিদম' সংজ্ঞায়িত করা হয়নি"। সমাধানটি অনুপস্থিত আমদানিতে পরিণত হয়েছে:

from qgis.analysis import QgsNativeAlgorithms

( কিউজিসআইএস 3.4 / 3.6 স্ট্যান্ডেলোন লিপি থেকে )

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.