Tôi đang sử dụng pyqgis trong một ứng dụng độc lập. Bây giờ tôi muốn tạo một biểu thức tùy chỉnh để sử dụng như bộ lọcExpression theo quy tắc ruleBasedRendererV2
. (Tôi đã thử trình kết xuất với các chức năng hiện có trước đây và mọi thứ đều hoạt động tốt!)
Tùy chỉnh qgisfunction
(hàm bitwise AND - vì chưa có chức năng như vậy) trông như thế này:
from qgis.utils import qgsfunction
@qgsfunction(args="auto", group='Python')
def bitwise_and(value1, value2, feature, parent):
return value1 & value2
Tôi cũng đã cố gắng đăng ký nó, thông qua:
from qgis.core import QgsExpression
QgsExpression.registerFunction(bitwise_and)
Kiểm tra biểu thức thông qua:
expressionString = 'bitwise_and(2, 2) = 2'
exp = QgsExpression(expressionString)
if exp.hasParserError():
print(exp.parserErrorString())
(Đưa ra 2=2
luôn luôn True
) hoạt động sau khi đăng ký chức năng, và thất bại nếu không. Nhưng vẫn vậy, tôi không thể sử dụng biểu thức trong một quy tắc ...
Ngay bây giờ, tệp chứa hàm nằm ở trên cùng trong thư mục dự án của tôi, được tự động đưa vào PATH, phải không?! (Theo Nathan Woodrow, tập tin có thể được đặt ở bất cứ đâu trong PATH - xem https://nathanw.net/2012/11/10/user-dained-expression-fifts-for-qgis/ ).
CẬP NHẬT: Đăng ký chức năng hoạt động cho đến nay, với mã từ phía trên - bây giờ vấn đề nằm ở chính chức năng ...
CẬP NHẬT # 2:
Rất lạ! Hàm đơn giản do_nothing
nhận hai đối số hoạt động tốt trong mã của tôi:
@qgsfunction(args="auto", group='Python')
def do_nothing(value1, value2, feature, parent):
return value1
Sử dụng biểu thức expString = 'do_nothing(2, 2) = 2'
CẬP NHẬT # 3:
Thay đổi đơn giản do_nothing
thành add_one
không còn hoạt động nữa:
@qgsfunction(args="auto", group='Python')
def add_one(value1, value2, feature, parent):
return value1 + 1
gọi nó qua expString = 'add_one(2, 2) = 3'
. Đó là lý do tại sao tôi nghĩ rằng nó có liên quan đến loại trở lại?!
@qgsfunction
hàm trong mã của mình không, như trong bạn xác định hàm trong mã. Bạn có thể bỏ qua expressions
thư mục nếu bạn đang tạo tập lệnh của riêng mình chỉ dành cho ứng dụng chính
do_nothing
). Nhưng chức năng ban đầu của tôi bitwise_and
vẫn không hoạt động. Bây giờ, tôi nghĩ nó có liên quan đến kiểu trả về của hàm do_nothing works
, nhưng add_one
không được!
~/.qgis2/python/expressions/
sau đó tải lại QGIS và chức năng có sẵn trong phần trình tạo biểu thức python