pyQGISでGRASSモジュールを呼び出しますか?


9

QGisでGrassツールボックスなしでGrassモジュール(v.to.db)を使用したいと思います。

私はPythonコンソールで試しましたが、役に立ちませんでした:

  • Sextanteプラグインを使用しているが、明らかにすべての草モジュールを知っているわけではなかった。

from sextante.core.Sextante import Sextante

Sextante.alghelp( "grass:v.to.db")

->アルゴリズムが見つかりません

  • 他のテスト:

grass.run_command( "v.to.db"、map = 'bl @ PERMANENT'、layer = '2'、option = 'start'、units = 'meters'、columns = 'X、Y、Z')

-> Traceback(最後の最新の呼び出し):

モジュールのファイル ""、行1

NameError:名前「草」が定義されていません

grassモジュールを使用する他の方法があるかどうか知っていますか?「属性フィールド」で選択できる列は1つだけで、複数の列を選択したいので、それを芝生ツールボックスで使用したくありません。


gis.stackexchange.com/questions/21867/…草をインポートする方法を示しています
アンダーダーク

回答:


3

プラグインまたはコンソールからグラス関数を使用するには、まず次のようにグラスモジュールをインポートする必要があります。

import grass.script as grass

インポートを忘れると、のNameErrorが発生しgrassます。

Python内から草使用する詳細な手順に従います

Windowsで実行していて、草をインポートしようとするとBad Handleエラーが発生する場合、これは一部のウィンドウシステムで発生する未解決のpythonバグの結果です。この問題を回避するには、grassをインポートして呼び出すコードを別のスクリプトに配置します。次に、このスクリプトをプラグイン内から独立したプロセスとして実行します。

callgrass.py:

if __name__ == '__main__':

import grass.script as grass
grass.run_command("v.to.db", map='bl@PERMANENT', layer='2', option='start', units='meters', columns='X,Y,Z')

print "Grass OUtput"

From Console/Plugin:

import subprocess

p1=subprocess.Popen(['callgrass.py', 'arg1', ...], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p1.stdin.close()
ret= p1.communicate()[1] # grab grass output  
print ret 

幸運を!

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