Я використовую 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, чи не так ?! (За словами Натана Вудрова, файл можна розмістити в будь-якому місці 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'
. Тому я вважаю, що це має відношення до типу, що повертається ?!
@qgsfunction
функцію у своєму коді, як і ви визначаєте функцію в коді. Ви можете ігнорувати expressions
папку, якщо ви робите власний сценарій, призначений лише для основного додатку
do_nothing
). Але моя оригінальна функція bitwise_and
все ще не працює. Тепер, я думаю , що це що - то робити з типом, що повертається значення функції, так як do_nothing works
, але add_one
не чинить!
~/.qgis2/python/expressions/
а потім перезавантажте QGIS, і функція доступна в розділі