スタンドアロンスクリプトからQGIS外のPythonの行展開機能にアクセスしたい。
使用するには、どのモジュールをロードする必要がありますか?
どうすればアクセスできますprocessing
か?
from qgis.core import *
layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')
processing.runalg('qgis:explodelines', layerInput, 'temp.shp')
スタンドアロンスクリプトからQGIS外のPythonの行展開機能にアクセスしたい。
使用するには、どのモジュールをロードする必要がありますか?
どうすればアクセスできますprocessing
か?
from qgis.core import *
layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')
processing.runalg('qgis:explodelines', layerInput, 'temp.shp')
回答:
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メーリングリストの議論に基づいています。
'/home/user/.qgis2/python/plugins'
。QGISを開いてplugins/Manage and install plugins
スクロールダウンして処理することで場所を見つけることができ、説明にインストール場所が表示されます。
cannot-create-a-qpixmap
このスタンドアローン機能を持つが、私はあなたがこの質問では、あまりにもそれを解く見る gis.stackexchange.com/questions/188074/...
layerInput
とにrunalgラインを変更:general.runalg(*sys.argv[1:])
ありません。このスクリプトは、この質問のとおり、並列GIS処理のための基礎となり得ることを言及する:gis.stackexchange.com/questions/119961/...
一般的な方法で作業できるようになるまで、回避策を説明します。
/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
)
注:一般的な方法(つまり、名前でアルゴリズムを呼び出す)に関して、投稿する前に解決する必要があるいくつかの問題が見つかりました。動作するようになり次第、投稿します。
import processing
。