मैं एक स्टैंडअलोन एप्लिकेशन के भीतर pyqgis का उपयोग कर रहा हूं। अब मैं नियम के रूप में filterExpression के रूप में उपयोग करने के लिए एक कस्टम अभिव्यक्ति बनाना चाहता था ruleBasedRendererV2
। (मैंने पहले के कार्यों के साथ रेंडरर की कोशिश की और सब कुछ ठीक हो गया!)
कस्टम qgisfunction
(बिटवाइज़ और फ़ंक्शन - क्योंकि ऐसा कोई फ़ंक्शन अभी तक नहीं है) ऐसा दिखता है:
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 को फिर से लोड करने के लिए अपनी फाइल को कॉपी करें और फंक्शन एक्सप्रेशन बिल्डर सेक्शन अजगर में उपलब्ध है