Saya menggunakan pyqgis dalam aplikasi mandiri. Sekarang saya ingin membuat ekspresi khusus untuk digunakan sebagai filterExpression ruleBasedRendererV2
. (Saya mencoba renderer dengan fungsi yang ada sebelumnya dan semuanya bekerja dengan baik!)
Kustom qgisfunction
(fungsi AND bitwise - karena belum ada fungsi seperti itu) terlihat seperti ini:
from qgis.utils import qgsfunction
@qgsfunction(args="auto", group='Python')
def bitwise_and(value1, value2, feature, parent):
return value1 & value2
Saya juga mencoba mendaftarkannya, melalui:
from qgis.core import QgsExpression
QgsExpression.registerFunction(bitwise_and)
Menguji ekspresi melalui:
expressionString = 'bitwise_and(2, 2) = 2'
exp = QgsExpression(expressionString)
if exp.hasParserError():
print(exp.parserErrorString())
(Memberi 2=2
selalu True
) berfungsi setelah mendaftar fungsi, dan gagal jika tidak. Tapi tetap saja, saya tidak bisa menggunakan ekspresi dalam aturan ...
Saat ini, file yang berisi fungsi terletak di atas di folder proyek saya, yang secara otomatis dimasukkan ke PATH, bukan ?! (Menurut Nathan Woodrow, file dapat ditempatkan di mana saja di PATH - lihat https://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/ ).
PEMBARUAN: Mendaftarkan fungsi berfungsi sejauh ini, dengan kode dari atas - sekarang masalahnya terletak pada fungsi itu sendiri ...
PEMBARUAN # 2:
Sangat aneh! Fungsi sederhana do_nothing
mendapatkan dua argumen berfungsi dengan baik dalam kode saya:
@qgsfunction(args="auto", group='Python')
def do_nothing(value1, value2, feature, parent):
return value1
Menggunakan ekspresi expString = 'do_nothing(2, 2) = 2'
PEMBARUAN # 3:
Perubahan sederhana do_nothing
menjadi add_one
tidak berfungsi lagi:
@qgsfunction(args="auto", group='Python')
def add_one(value1, value2, feature, parent):
return value1 + 1
memanggilnya via expString = 'add_one(2, 2) = 3'
. Itu sebabnya saya pikir itu ada hubungannya dengan mengetik kembali ?!
@qgsfunction
fungsi dalam kode Anda, seperti dalam Anda mendefinisikan fungsi dalam kode. Anda dapat mengabaikan expressions
folder jika Anda membuat skrip Anda sendiri yang hanya untuk aplikasi utama
do_nothing
). Tetapi fungsi asli saya bitwise_and
masih tidak berfungsi. Sekarang, saya pikir itu ada hubungannya dengan jenis kembalinya fungsi, karena do_nothing works
, tetapi add_one
tidak!
~/.qgis2/python/expressions/
kemudian muat ulang QGIS dan fungsinya tersedia di bagian python ekspresi builder