ฉันใช้ pyqgis ในแอปพลิเคชันแบบสแตนด์อโลน ตอนนี้ผมต้องการที่จะสร้างการแสดงออกที่กำหนดเองเพื่อที่จะใช้เป็น FilterExpression ruleBasedRendererV2
ในการปกครองของ (ฉันลองใช้โหมดแสดงภาพกับฟังก์ชั่นที่มีอยู่ก่อนหน้าและทุกอย่างทำงานได้ดี!)
Custom qgisfunction
(bitwise AND-function - เนื่องจากยังไม่มีฟังก์ชั่นดังกล่าว) มีลักษณะดังนี้:
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/11/user-defined-expression-functions-for-qgis/ )
UPDATE: การลงทะเบียนฟังก์ชั่นใช้งานได้จนถึงตอนนี้ด้วยรหัสจากด้านบน - ตอนนี้ปัญหาอยู่ที่ฟังก์ชัน ...
อัปเดต # 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 และฟังก์ชั่นนั้นมีอยู่ใน python ส่วน Builder expression