Estoy usando pyqgis dentro de una aplicación independiente. Ahora quería crear una expresión personalizada para usar como filterExpression en la regla de ruleBasedRendererV2
. (¡Probé el procesador con funciones existentes antes y todo funcionó bien!)
Personalizado qgisfunction
(función AND a nivel de bit, ya que aún no existe tal función) se ve así:
from qgis.utils import qgsfunction
@qgsfunction(args="auto", group='Python')
def bitwise_and(value1, value2, feature, parent):
return value1 & value2
También intenté registrarlo, a través de:
from qgis.core import QgsExpression
QgsExpression.registerFunction(bitwise_and)
Probar la expresión a través de:
expressionString = 'bitwise_and(2, 2) = 2'
exp = QgsExpression(expressionString)
if exp.hasParserError():
print(exp.parserErrorString())
(Dar 2=2
siempre así True
) funciona después de registrar la función, y falla si no. Pero aún así, no puedo usar la expresión dentro de una regla ...
En este momento, el archivo que contiene la función se encuentra en la parte superior de mi carpeta de proyecto, que se incluye automáticamente en PATH, ¿no? (Según Nathan Woodrow, el archivo se puede colocar en cualquier lugar de la RUTA; consulte https://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/ ).
ACTUALIZACIÓN: el registro de la función funciona hasta ahora, con el código de arriba; ahora el problema radica en la función misma ...
ACTUALIZACIÓN # 2:
¡Muy extraño! La función simple para do_nothing
obtener dos argumentos funciona bien en mi código:
@qgsfunction(args="auto", group='Python')
def do_nothing(value1, value2, feature, parent):
return value1
Usando expresión expString = 'do_nothing(2, 2) = 2'
ACTUALIZACIÓN # 3:
El simple cambio de do_nothing
a add_one
ya no funciona:
@qgsfunction(args="auto", group='Python')
def add_one(value1, value2, feature, parent):
return value1 + 1
llamándolo a través de expString = 'add_one(2, 2) = 3'
. ¿Es por eso que creo que tiene algo que ver con el tipo de retorno?
@qgsfunction
función en su código, ya que define la función en el código? Puede ignorar la expressions
carpeta si está creando su propio script que es solo para la aplicación principal
do_nothing
). Pero mi función original bitwise_and
todavía no funciona. Ahora, creo que tiene algo que ver con el tipo de retorno de la función do_nothing works
, ¡pero add_one
no lo tiene!
~/.qgis2/python/expressions/
luego vuelva a cargar QGIS y la función está disponible en la sección del generador de expresiones python