QGIS Pythonコンソールの外で六分儀アルゴリズムを実行する方法は?


10

OSGeo4Wディストリビューションのスタンドアロンpythonからsextanteを実行する方法を見つけようとするのはちょっと行き詰まっています。これを実行したいのは、モデルビルダーからモデルをテストするたびにダイアログにパラメーターを入力するのが面倒だったからです。

だからここにそれを呼ぶPythonスクリプトがあります test.py

# as per http://qgis.org/pyqgis-cookbook/intro.html#using-pyqgis-in-custom-application
from qgis.core import *
# supply path to where is your qgis installed
QgsApplication.setPrefixPath("C:/OSGeo4W/apps/qgis", True)
# load providers
QgsApplication.initQgis()

from sextante.core.Sextante import Sextante
Sextante.alglist()
Sextante.alghelp("saga:slopeaspectcurvature")

バッチファイルから呼び出していること

@echo off

set OSGEO4W_ROOT=C:\OSGeo4W
set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python;%OSGEO4W_ROOT%\apps\qgis\python\plugins;%HOME%/.qgis/python/plugins
set PATH=%OSGEO4W_ROOT%\bin;%OSGEO4W_ROOT%\apps\qgis\bin;%OSGEO4W_ROOT%\apps\qgis\plugins

python test.py

問題は、Algorithm not foundQGIS pythonコンソールから意味のある出力が得られるのにそれが言うことです。

何かを初期化するのに欠けているような気がします。しかし、何ですか?

GUIを使用して大量のパラメーターを入力する以外に、モデルをテストするより良い方法はありますか?

アップデート7/2/2012

「マイン」アルゴリズムでテストするための一般的なpythonicソリューションを探しています。前述のアルゴリズムは、何かがおそらく初期化されなかったことを示す単なる例です。

アップデート7/27/2012

スクリプトランナーの代わりに、IPythonコンソールを使用してスクリプトをデバッグします。それ以外は何も実行せずに六分儀で簡単な単体テストを行う方法はないようです:(

アップデート7/30/2012

Victor Olayaが示唆するように、私は以下のコードのようにSextanteを初期化しようとします。

#!/usr/bin/env python

import sys
from PyQt4.QtGui import QApplication
from sextante.core.Sextante import Sextante

def main():
    """ main function or something """
    # as per http://qgis.org/pyqgis-cookbook/intro.html#using-pyqgis-in-custom-application
    from qgis.core import *
    import qgis.utils

    app = QApplication(sys.argv)
    # supply path to where is your qgis installed
    QgsApplication.setPrefixPath("C:/OSGeo4W/apps/qgis", True)
    # load providers
    QgsApplication.initQgis()
    # how???
    # qgis.utils.iface = QgisInterface.instance()
    Sextante.initialize()
    run_script(qgis.utils.iface)

def run_script(iface):
    """ this shall be called from Script Runner"""
    Sextante.alglist()
    Sextante.alghelp("saga:slopeaspectcurvature")

if __name__=="__main__":
    main()

しかし、私は次のようなものを得ます

Traceback (most recent call last):
  File "test.py", line 29, in
    main()
  File "test.py", line 20, in main
    Sextante.initialize()
  File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\core\Sextante.py", line 94, in initialize
    Sextante.addProvider(GrassAlgorithmProvider())
  File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\grass\GrassAlgorithmProvider.py", lin
e 17, in __init__
    self.actions.append(DefineGrassRegionAction())
  File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\grass\DefineGrassRegionAction.py", li
ne 16, in __init__
    canvas = QGisLayers.iface.mapCanvas()
AttributeError: 'NoneType' object has no attribute 'mapCanvas'

まあ...それはすべて同じようにメーリングリストの議論になります。おそらく、SEの代わりにqgis-userまたはqgis-developerに移行する価値があります。


ifaceスタンドアロンのQGISスクリプトではアクセスできません。 ifaceサイドQGISで実行する場合にのみ使用します。
Nathan W

回答:


5

Gary ShermanのScript Runnerプラグインで動作するようにスクリプトを作成し、QGIS内から実行できます。編集後にスクリプトを再実行すると、スクリプトランナーはモジュールをリロードして変更を反映するように求められます。参照:スクリプトランナーのplugins.qgis.orgリスト

重要なことは、スクリプトランナーによって呼び出されるrun_script関数があることを確認することです(彼のブログの例):

def run_script(iface):
    ldr = Loader(iface)
    ldr.load_shapefiles('/vmap0_shapefiles')

理論的にはデバッグに役立つはずですが(QGISの内部では)、Windowsでは壊れているように見えます。それはAttributeError: 'module' object has no attribute 'run_script'私がソースビューアで見ることができるdocstringsがないことを言い続け、主張し続けます。
mlt

def run_script(iface)関数を追加しましたか?これがないと、スクリプトはScript Runnerで実行されません。
dakcarto

どうやら、スクリプトをtestと名付けるべきではない:-) mytestは、これまでのところ大丈夫です。__import__全体を見渡すのではなく、スコープを制限できると便利ですsys.path。docstringと他の関数のリストを表示します。
mlt

スクリプトランナーはここ
Dave X 14

4

Sextanteは初期化する必要があるため、アルゴリズムをロードして後で実行できます。

何かを行う前にSextante.initialize()を呼び出します。


こんにちはビクター、これはまだ事実ですか?スタンドアロンスクリプト(QGISの外)でSextanteを呼び出す方法に苦労していて、Googleが機能しないすべての例を見つけています。これは1年前に投稿されたので、六分儀のアーキテクチャが変わったのだろうか?
リッチ

3

この投稿を読む新規ユーザーのために、スタンドアロンのPyQGISスクリプトでQGIS処理アルゴリズムを実行する方法があります。回答を確認OSGeo4wシェルスクリプトを実行するときにqgis.coreのインポートエラーをし、どのように私は、Pythonで`processing`にアクセスすることができますか?、テスト済みの例を提供します。


1
そして、反対票の理由は...?
ヘルマン・カリージョ

2

使用したいアルゴリズムは佐賀の一部であるため、佐賀を直接使用できます。

たとえば、バッチファイルから:

@ECHO OFF

REM SET SAGA_MLB = C:\SAGA\Modules
REM SET PATH = %PATH%;C:\SAGA

saga_cmd ta_morphometry "Slope, Aspect, Curvature" -ELEVATION=elevation.sgrd -SLOPE=slope.sgrd -ASPECT=aspect.sgrd -CURV=NULL -HCURV=NULL -VCURV=NULL -METHOD=5

PAUSE

申し訳ありませんが、明確にすべきでした。ほんの一例です。私はない、特にSAGAを使用する予定。
mlt

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