我在独立应用程序中使用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/)。
更新:到目前为止,函数的注册可以通过上面的代码进行-现在问题出在函数本身上。
更新#2:
很奇怪!do_nothing
获得两个参数的简单函数在我的代码中运行良好:
@qgsfunction(args="auto", group='Python')
def do_nothing(value1, value2, feature, parent):
return value1
使用表达 expString = 'do_nothing(2, 2) = 2'
更新#3:
简单的变化do_nothing
,以add_one
不工作下去:
@qgsfunction(args="auto", group='Python')
def add_one(value1, value2, feature, parent):
return value1 + 1
通过调用它expString = 'add_one(2, 2) = 3'
。这就是为什么我认为它与返回类型有关?
按照您的建议,功能将出现在QGIS功能编辑器中,并且可以按预期使用它。但是,当尝试在我的独立应用程序中使用它时,功能不起作用!-我认为,当QGIS启动时,它会以某种方式在表达式文件夹中注册所有文件,但是我想知道如何?
—
Henhuy
您是否
—
Nathan W
@qgsfunction
在代码中使用该函数,就像在代码中定义该函数一样?expressions
如果您要制作自己的脚本仅用于主应用程序,则可以忽略该文件夹
您是对的-当该功能的注册如上所述工作时(例如
—
Henhuy
do_nothing
)。但是我的原始功能bitwise_and
仍然无法正常工作。现在,我认为它与函数的返回类型有关,因为do_nothing works
,但与之add_one
无关!
~/.qgis2/python/expressions/
然后重新加载QGIS,该函数在表达式生成器部分python中可用