スタンドアロンアプリケーション内で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_nothing2つの引数を取得する単純な関数は、私のコードでは正常に機能します。
@qgsfunction(args="auto", group='Python')
def do_nothing(value1, value2, feature, parent):
    return value1
式を使用する expString = 'do_nothing(2, 2) = 2'
アップデート#3:
do_nothingtoの単純な変更は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で利用できます