スタンドアロンアプリケーション内でpyqgisを使用しています。次に、のルールでfilterExpressionとして使用するカスタム式を作成したいと思いましたruleBasedRendererV2
。(以前に既存の関数でレンダラーを試しましたが、すべてうまくいきました!)
カスタムqgisfunction
(ビットごとのAND関数-そのような関数はまだないため)は次のようになります。
from qgis.utils import qgsfunction
@qgsfunction(args="auto", group='Python')
def bitwise_and(value1, value2, feature, parent):
return value1 & value2
私もそれを登録しようとしました:
from qgis.core import QgsExpression
QgsExpression.registerFunction(bitwise_and)
式をテストする:
expressionString = 'bitwise_and(2, 2) = 2'
exp = QgsExpression(expressionString)
if exp.hasParserError():
print(exp.parserErrorString())
(与える2=2
ので、いつもはTrue
)関数を登録した後動作し、ない場合は失敗します。それでも、ルール内で式を使用することはできません...
現時点では、関数を含むファイルは、自動的にPATHに含まれているプロジェクトフォルダーの一番上にありますね。(Nathan Woodrowによると、ファイルはPATHのどこにでも配置できます-https : //nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/を参照してください)。
UPDATE:上記のコードで、これまでの作品の関数の登録-機能自体に今問題の嘘...
アップデート#2:
非常に奇妙な!do_nothing
2つの引数を取得する単純な関数は、私のコードでは正常に機能します。
@qgsfunction(args="auto", group='Python')
def do_nothing(value1, value2, feature, parent):
return value1
式を使用する expString = 'do_nothing(2, 2) = 2'
アップデート#3:
do_nothing
toの単純な変更はadd_one
機能しなくなりました。
@qgsfunction(args="auto", group='Python')
def add_one(value1, value2, feature, parent):
return value1 + 1
を介してそれを呼び出すexpString = 'add_one(2, 2) = 3'
。それが、戻り値の型と関係があると私が思う理由です!?
@qgsfunction
コードで関数を定義する場合と同様に、コードで関数を使用していますか。expressions
メインアプリ専用の独自のスクリプトを作成している場合は、フォルダーを無視できます
do_nothing
)。しかし、私の元の機能bitwise_and
はまだ機能しません。今、私はそれがあるため、関数の戻り値の型とは何かを持っていると思いますdo_nothing works
が、add_one
しません!
~/.qgis2/python/expressions/
QGISをリロードすると、関数は式ビルダーセクションのpythonで利用できます