Pythonで「処理」にアクセスしますか?


15

スタンドアロンスクリプトからQGIS外のPythonの行展開機能にアクセスしたい。

使用するには、どのモジュールをロードする必要がありますか?

どうすればアクセスできますprocessingか?

from qgis.core import *

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

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

2
使用する必要があると思いますimport processing
ジョセフ

@Joseph具体的でないことで申し訳ありません。しかし、スタンドアロンスクリプトからアクセスしたいです。
-ustroetz

ああ心配ありません:)。その場合、謝罪しますが、QGIS内で常に実行しているので、私は知りません。うまくいけば、他の人が助言するでしょう。
ジョセフ

こんにちは@ustroetz、これをスタンドアロンスクリプトから実行できましたか?私も外部スクリプトを実行しようとしているので、お願いします。
ジョセフ

@ジョセフいいえ、私はしていない
-ustroetz

回答:


25

UPDATE 24.04.2018: QGIS v3.x これを行う方法についてはこちらをご覧ください。


QGIS v2.xの場合

最後に、スタンドアロンのPyQGISスクリプトを介して処理アルゴリズムを実行する適切な方法を見つけました。

Processingプラグインバージョン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')応じて使用する必要があります。

Error:Algorithm not foundで実際の例を見つけました。これはQgis-devメーリングリストの議論に基づいてます。


1
処理プラグインはにない可能性があります'/home/user/.qgis2/python/plugins'。QGISを開いてplugins/Manage and install pluginsスクロールダウンして処理することで場所を見つけることができ、説明にインストール場所が表示されます。
パープル氏

2
私は約警告をたくさん受けたcannot-create-a-qpixmapこのスタンドアローン機能を持つが、私はあなたがこの質問では、あまりにもそれを解く見る gis.stackexchange.com/questions/188074/...
氏パープルの

1
あなたは作ることができ、より汎用的なドロップすることにより、スタンドアロンスクリプトlayerInputとにrunalgラインを変更:general.runalg(*sys.argv[1:])ありません。このスクリプトは、この質問のとおり、並列GIS処理のための基礎となり得ることを言及する:gis.stackexchange.com/questions/119961/...
ミスター紫

同じフレームワークを実行することはできますが、スタンドアロンのPythonからプラグインを実行することは可能ですか(QGIS内ではありません)?alglist()関数を実行しましたが、QGISにプラグインがインストールされているのが見えません...-
Irene

3

一般的な方法で作業できるようになるまで、回避策を説明します。

/home/germap/.qgis2/python/plugins/コンピューターにインストールされているProcessingプラグインバージョン2.2.0-2(このバージョンを使用することをお勧めします)を使用します。そこから処理モジュールをインポートするため、このフォルダーの場所を知る必要があります。

プロバイダー(qgis)とアルゴリズム(explodelines)を知っているので/home/germap/.qgis2/python/plugins/processing/algs/qgis/、explode linesスクリプト名を見ることができます:Explode.pyこの情報により、アルゴリズムをPythonスタンドアロンスクリプトに直接インポートできます。

そこで、Pythonコンソールを開いて次のスクリプトをコピーします(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

注:一般的な方法(つまり、名前でアルゴリズムを呼び出す)に関して、投稿する前に解決する必要があるいくつかの問題が見つかりました。動作するようになり次第、投稿します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.